Redis数据结构拾遗

1. Hash
   Dict的实现,冲突链表,当链表load高时,rehash
2. ziplist
   在一块连续内存存放data, data前后各一个字段记录前后data的长度(相当于双向链表),这个长度是可变长编码的;
   优点:没有内存碎片;省去前后指针;
   缺点:在ziplist中间插入数据时,需要把插入位置后面的所有data以此往后挪(深拷贝);
   使用场景:链表数据比较短;节点比较少; 
   所以,Redis里,hset和hmset在节点个数超过512或任意value长度超过512时,转为使用Dict
3. quicklist
   list的实现,普通有序双向链表+ziplist;
   使用ziplist还是因为上面描述的优点;考虑到ziplist的缺点,有一个难题:
   quicklist节点包含多长的ziplist合适? Redis支持根据实际场景配置
4. skiplist: sorted set的实现;
   跳表level根据概率决定;
   优点:对比Hash,skiplist序; 对比平衡树,实现简单, 内存更灵活,时间复杂度相当,范围查询更简单;
   改进skiplist每个节点维护span(指针跨度),从而支持zrevrank、zrevrange;
   sorted set还使用dict, 从而支持zscore;
   当数据较少时,使用ziplist就够了;
参考:http://zhangtielei.com/posts/server.html
                  

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券