1. 哈希对象保存的所有键值对的键和值的字符串长度都小于 64 字节;
  2. 哈希对象保存的键值对数量小于 512 个;ziplist 编码的数据底层是使用压缩列表作为底层数据结构
  • https://www.jianshu.com/p/dee0f1edc4e4
  • 省内存的原因是新建一个 hash 对象时开始是用 ziplist(又称为 small hash)来存储的。这个 ziplist 其实并不是 hash table,但是 ziplist 相比正常的 hash 实现可以节省不少 hash 本身需要的一些元数据存储开销。尽管 ziplist 的添加,删除,查找都是 O(n),但是由于一般对象的 field 数量都不太多。所以使用 ziplist 也是很快的,也就是说添加删除平均还是 O(1) 。如果 field 或者 value 的大小超出一定限制后,redis 会在内部自动将 ziplist 替换成正常的 hash 实现,这个限制可以在配置文件中指定 hash-zipmap-max-entries 参数来控制。将 hash-zipmap-max-entries 设置为 1000 时,性能比较好,超过 1000 后 HSET 命令就会导致 CPU 消耗变得非常大。
10-05 17:23