一:概述
- Redis 源码版本为3.0.0.
- OBJECT ENCODING key 查看数据底层类型实现。
二:集合对象的底层实现
- 编码方式
- 字符串对象共有两种编码方式 intset(整数集合) / hashtable(字典)
- 编码方式的选择
- 当列表对象 元素都是整数/元素数量小于512 则使用 intset(set-max-intset-entries) 。
- 不满足条件则使用 hashtable.
- inset 编码方式
- intset 编码 使用 Intset(数组) 作为底层实现。(以此来保证集合内唯一的元素)
- 图示
-
- hashtable 编码方式
- 使用字典实现,字典的每个键都是一个字符串对象(包含了一个集合元素)(以此来保证集合内唯一的元素)。
- 字典的每个值都是null(没什么作用)。
- 图示
-
四:编码转换
- 当 集合内 不单单保存整数/长度大于512 则会编码的转换 Intset -> hashtable.
五:集合命令的实现
-