我有一个非常简单的php redis应用程序,它在某些事件中创建键。所有键都只是计数器,并且具有24小时的过期时间。基本上,每个键都有一个滚动窗口,为了收集一些统计信息,持续24小时。
if ($redis->exists($key)) {
$redis->incr($key);
}
else {
$redis->set($key, '1');
$now = time(); // current timestamp
$redis->expireAt($key, $now + 86400);
}
当我使用
$list = $redis->keys("*");
(或在redis-cli控制台中使用keys *
)提取所有键的概述时,我会怀疑它们按创建日期的时间顺序排序。然而,实际情况并非如此。它们既不按字母顺序排序,也不按值排序...因此我的问题是,这个列表是如何排序的?
hkeys keyname
获取与keyname
对应的所有 字段,那么这些 字段 是按顺序排列的吗?它们是按照什么排序的呢? - PychongHSET
,如果你的HSET
很大,你可以使用HSCAN
。 在底层,小的HSETs
存储在内存中作为zip-list
,因此您将按照添加它们的相同顺序获取密钥。但是,在超过hash-max-ziplist-value 512
或hash-max-ziplist-entries 64
的阈值后,HSET
将转换为真正的哈希表,然后键将以随机顺序返回给您。 更多信息:https://redis.com/ebook/part-2-core-concepts/01chapter-9-reducing-memory-use/9-1-short-structures/9-1-1-the-ziplist-representation/ - h0x91B