REDIS HGETALL按序输出结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了REDIS HGETALL按序输出结果相关的知识,希望对你有一定的参考价值。

今天在项目中使用Redis的hash结构存一些商品数据,存的时候是按照商品id从小到大放进去的。然后现在想hgetAll着取出来,也能够按照id顺序再取出来,但是发现结果并不是这样的,输出是乱序的。
随决定看一下到底是为啥,发现了猫腻。

《REDIS设计与实现》中指出,

创建空白哈希表时, 程序默认使用 REDIS_ENCODING_ZIPLIST 编码, 当以下任何一个条件被满足时, 程序将编码从 REDIS_ENCODING_ZIPLIST 切换为 REDIS_ENCODING_HT :

哈希表中某个键或某个值的长度大于 server.hash_max_ziplist_value (默认值为 64 )。
压缩列表中的节点数量大于 server.hash_max_ziplist_entries (默认值为 512 )。

然后看了看自己的数据,发现值的长度大于64了,因此采用了hashtable的编码格式。是无序的。

以上是关于REDIS HGETALL按序输出结果的主要内容,如果未能解决你的问题,请参考以下文章

Redis-cli 中的 HGETALL 显示类似 x00 xff 的结果。到底发生了啥?

由Redis的hGetAll函数所引发的一次服务宕机事件

java 面试题 -- 线程 按序 交替

JUC-Condition和Lock实践-线程按序交替执行

redis --- Hash类型的使用

(15)redis Pipeline详解