编码
一、认识
Redis
中的 redisObject
有不同的编码方式,用于优化内存使用和操作效率。根据数据类型和数据规模,Redis
会选择适当的编码方式。Redis
会根据以下条件自动选择编码方式:
-
数据类型(字符串、列表、集合等)。
-
数据规模(元素数量和大小)。
-
配置文件设置(如
zset-max-ziplist-entries
、hash-max-ziplist-entries
等)。
Redis
的编码方式提供了存储效率和操作性能的灵活平衡:
-
小型数据使用紧凑的编码(如
ZIPLIST
、EMBSTR
、INTSET
)。 -
大型或动态数据使用高效的结构(如
HT
、SKIPLIST
、QUICKLIST
)。 理解这些编码方式有助于优化Redis
的性能和内存使用。
二、HT
HT
:哈希表,用于存储较大或非整数的集合。
三、INT
INT
:当字符串可以转换为整数时(例如 123
),会使用整数编码。存储为一个 64
位的 long
值,节省内存。
四、RAW
RAW
原始字符串。使用动态分配的内存存储大字符串。适用于大于 44
字节的字符串。
五、EMBSTR
EMBSTR
:针对小字符串(44
字节或更小)的优化。将 redisObject
和字符串数据存储在连续的内存块中,减少内存碎片和分配开销。一旦字符串需要修改,会转换为 RAW
。
六、INTSET
INTSET
:小型整数集合(只包含整数)。数据量较小时(元素个数低于 512,或可配置)。
七、ZIPLIST
ZIPLIST
:使用压缩列表存储小型列表。节省内存,但对大量数据或频繁修改不适合。适用于:元素总大小小于 list-max-ziplist-size
配置的值。列表元素数量较少。
八、SKIPLIST
SKIPLIST
:跳跃表,用于存储大型有序集合。提供高效的范围查找和排序。
九、QUICKLIST
QUICKLIST
:压缩列表和双向链表的结合体。提供更高效的存储,同时支持快速操作。适用于大型列表。