Hash 结构与 ZSet 结构非常类似
1.都是键值存储
2.都需要根据键获取值
3.键必须唯一
区别如下:
1.ZSet 的键是 member,值是 score ; hash 的键和值都是任意值
2.ZSet 要根据 score 进行排序,而 hash 则不需要
因此 Hash 底层采用的编码与 ZSet 也基本一致,只需要把排序有关的 SkipList 去掉即可
1.Hash 结构默认采用 ZipList 编码,用以节省内存。ZipList 中相邻的两个 entry 分别保存 field 和value
2.当数据量较大时,Hash 结构会转为 HT 编码,也就是 Dict ,触发条件有两个:
1.ZipList 中的元素数量超过了 hash_max_ziplist_entries(默认 512 )
2.ZipList 中的任意 entry 大小超过了 hash_max_ziplist_value (默认 64 字节)
结构如下:
可通过 config get/set 查看或设置参数的值