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 编码之间,符合条件的情况下可以转换。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」