企业网站备案快吗,wordpress章节分页,wordpress全自动淘宝客,免费站推广网站链接字典 redis本身使用字典结构管理数据 redis使用hash表实现字典结构 使用了什么hash算法 使用SipHash算法#xff0c;该算法能有效防止Hash表碰撞#xff0c;并有不错的性能 hash冲突怎么解决 使用链表法解决hash冲突 hash表如何扩容 渐进式扩容#xff0c;不会引起线程长期阻… 字典 redis本身使用字典结构管理数据  redis使用hash表实现字典结构 使用了什么hash算法 使用SipHash算法该算法能有效防止Hash表碰撞并有不错的性能 hash冲突怎么解决 使用链表法解决hash冲突 hash表如何扩容 渐进式扩容不会引起线程长期阻塞redis字典扩容在每次操作数据的时候都执行一次单步扩容操作将ht[0].table[rehashidx]的数据迁移到ht[1]再将ht[0]指向ht[1] 扩容条件 hash表存储的键值对数量大于等于hash表数组的长度开启了dict_can_resize或者负载因子大于dict_force_resize_ratio     hash扩容 ht[0] — ht[1] 先找到ht[0]第一个非空索引位遍历该索引位链表的所有元素 计算每个元素在ht[1]的hash表数组中的索引将元素移动到ht[1]中 当ht[0]的used属性归于0时则移动全部完成释放ht[0].table将ht[0]指针指向ht[1]  hash缩容 执行删除操作后redis会检查字典是否满足缩容(长度大于4负载因子小于0.1)  编码 散列有两种编码类型:OBJ_ENCODING_HT和OBJ_ENCODING_ZIPLIST,使用dict和ziplist结构存储数据优先使用ziplist存储数据一个节点存储键其后驱节点存储值查找的时候遍历ziplist即可。 要使用ziplist存储元素需满足以下几个条件 散列中所有的键和值的长度小于或等于server.hash_max_ziplist_value(通过hash-max-ziplist-value项配置)散列中键值对的数量小于server.hash_max_ziplist_entries     
4、集合 无序集合 redis通常使用字典结构保存集合数据字典健存储集合元素字典值为空。如果一个集合全为整数使用字典就有点浪费了redis使用intset保存。 插入元素到intset中 获取插入元素编码如果插入元素编码级别高于intset编码intset的编码则需要升级通过二分查找插入元素是否为重复插入是则插入失败否则赋值为intset重新分配内存空间(分配插入元素所需空间)若插入位置存在后驱节点后驱节点全部后移更新intset的len值 intset升级编码 设置新的编码然后分配新的内存空间将intset的元素移动到新位置然后插入新的元素  redis不会降级intset编码