跳到主要内容

编码

2025年01月15日
柏拉文
越努力,越幸运

一、认识


Redis 中的 redisObject 有不同的编码方式,用于优化内存使用和操作效率。根据数据类型和数据规模,Redis 会选择适当的编码方式。Redis 会根据以下条件自动选择编码方式:

  1. 数据类型(字符串、列表、集合等)。

  2. 数据规模(元素数量和大小)。

  3. 配置文件设置(如 zset-max-ziplist-entrieshash-max-ziplist-entries 等)。

Redis 的编码方式提供了存储效率和操作性能的灵活平衡

  1. 小型数据使用紧凑的编码(如 ZIPLISTEMBSTRINTSET)。

  2. 大型或动态数据使用高效的结构(如 HTSKIPLISTQUICKLIST)。 理解这些编码方式有助于优化 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:压缩列表和双向链表的结合体。提供更高效的存储,同时支持快速操作。适用于大型列表。