python字典的基本操作,python 字典的用法
什么时候扩充一些目录操作命令的基础知识?渐进式哈希源代码
命令hset key不存在,执行create操作,执行update操作,hsetnx key不存在,然后执行命令hget获取字段上的value value HINCRBY加上多少数据,当值可以解释为数字时,HINCRBYFLOAT增加浮点数hstrlen计数该字段的值的长度是否存在。这个fieldhdel是否删除字段,如果要删除一个key,最好用del删除keyhlen来统计一个key hmset中的fileds个数。将多个filedhkeys设置为一个键获取key hvals的所有字段值获取字段的值h金属所有字段和值一起获取一些原理知识redis:6.2.1dict位置:src/dict . h src dict . c src/t _ hash . c
字典采用渐进式重散列方法,散列算法采用murmurHashX算法(X代表版本号)。哈希因子=已用/大小。
什么时候扩容?redis服务器在BGSAVE或BGWRITEAOF命令未启动且hash factor=1,hash factor=5的情况下启动上述命令,因为这两个命令会启动子进程,写入时复制会占用大量内存,这也是一个细节优化。
当检查并添加渐进式哈希时,将判断它是否是重哈希。如果是,它将稍微从旧哈希表移动到新哈希表。略指的是渐进式重散列,重散列就是把这个哈希表的索引后面的所有链表都移到新的哈希表中。指数给你10个机会。如果10个机会都用完了,还没找到合适的就回来。
这部分源代码还可以,可以理解。请介绍一下这些struct成员变量,可以在src/dich.h中找到
这是一本字典。类型可以理解为回调函数。Privdata暂时不用,dictht只是两个哈希表。当rehashidx不等于1时,意味着在渐进式重新散列中,rehashidx意味着在第一个哈希表中在那里散列的下标。Pauserehash查看名称并猜测渐进式哈希是否终止。
typedef struct dict { dict type * type;//设置哈希函数的void * privdatadicht ht[2];//两个哈希表长rehashidx/*如果rehashidx==-1 */int 16 _ t pauserehash,则不进行重新散列;/*如果0则暂停重散列(0表示编码错误)*/} dict;Dichttable是用来存储key-value的,size是用来开放容量的,sizemash=size-1是用来计算哈希值的。使用的包含多少元素,包括开链方法拥有的元素?
typedef结构dictht { dictEntry * * table无符号长整型;无符号长整型sizemask使用无符号长整型;} dicthtDictType存储了一系列函数指针。
typedef struct dict type { uint 64 _ t(* hash function)(const void * key);//获取哈希值void * (* keydup) (void * privdata,const void * key);void *(*valDup)(void *privdata,const void * obj);int (*keyCompare)(void *privdata,const void *key1,const void * key 2);void(* key destructor)(void * priv data,void * key);void(* val destructor)(void * priv data,void * obj);int(* expandAllowed)(size _ t more mem,double used ratio);//扩容} dictType在t_hash.c文件中,我们可以看到我们经常使用的hset和hget的用法。Void hsetCommand(client *c),临时能力有限,一接触源代码就能大致理解。一开始很好奇hset的字段是怎么存储的,今天终于知道了。
键仍然存储在哈希表中,而val仍然是哈希表。val-key是field字段,val-val是val的存储。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。