Redis - Set底层数据结构

Set对象编码是 intset 或者 hashtable

1、intset

intset 编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。

举个例子,以下代码将创建一个intset 编码集合对象:

2、hashtable

hashtable 编码的集合对象使用字典作为底层实现,字典的每个键都是一个字符串对象,每个字符串对象包含了一个集合元素,而字典的值则全部被设置为 NULL。

举个例子,以下代码将创建一个 hashtable 编码集合对象:

3、编码转换

当Set对象可以同时满足以下两个条件时,则使用 intset 编码:

1)Set对象保存的所有元素都是整数值

2)Set对象保存的元素数量不超过 512 个(默认值,配置参数set-max-intset-entries可以修改);

不能满足这两个条件的Set对象需要使用 hashtable 编码。

注意:第二个条件的上限值是可以修改的,具体请看配置文件。

set-max-intset-entries 选项的说明:对于使用 intset 编码的Set对象来说,当使用 intset 编码所需两个条件的任意一个不能被满足时,对象的编码转换操作就会被执行,原本保存在整数集合中的所有元素都会被转移并保存到字典里面,并且对象的编码也会从 intset 变为 hashtable

示例1: 不满足“所有元素都是整数值”

示例2: 不满足“元素数量不超过 512 个

 

4、要点总结

1)Set对象的编码可以是 intset 或者 hashtable;

2)intset 编码的集合对象使用整数集合作为底层实现;

3)hashtable 编码的集合对象使用字典(map)作为底层实现;

4)intset 与 hashtable 编码之间,符合条件的情况下可以转换。

posted @   李若盛开  阅读(1412)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示