Php Redis:键*的结果是如何排序的?

Php Redis:键*的结果是如何排序的?,php,redis,phpredis,Php,Redis,Phpredis,我有一个非常简单的php redis应用程序,它在某些事件中创建键。所有钥匙都是计数器,过期时间为24小时。基本上每个键都有24小时的滚动窗口来收集一些统计数据 if ($redis->exists($key)) { $redis->incr($key); } else { $redis->set($key, '1'); $now = time(); // current timestamp $redis->expireAt($key,

我有一个非常简单的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控制台中,我会怀疑创建日期的时间顺序。但事实并非如此。它们也不是按字母顺序,按值排序


所以我的问题是,这个列表是如何排序的

首先,不要使用
键*
这是调试功能,不是为生产设计的,你可以杀死你的服务器。。。 如果您需要以安全的方式枚举数据库中的所有密钥,请使用
SCAN
功能和
LIMIT

无论如何,
扫描
的结果不会以任何方式排序,结果顺序与redis哈希表的内部内存结构相关

关于您的php脚本,您只需一个命令即可完成,无需
存在
设置
过期
只需运行:

设置键1 EX 86400 NX

EX 86400
mean将在86400(1天)秒后过期

NX
表示仅在密钥不存在时创建密钥


如果此命令返回(nil)run regular
INCR key
则表示该键已存在。顺便说一句,INCR命令不会删除你的过期设置。

一个近乎完美的回答——根除一个邪恶的模式,提供问题的答案,并教授正确的Redis——如果可以的话,我会投两次票。您所描述的最后一个伪PHP示例将使其变得完美;pHi Itamar,不知道他在用什么客户:)顺便说一句,偶尔在特拉维夫北部喝杯咖啡会很好。我们对客户的看法很公正。我很乐意这样做&选择账单(当然,假设没有甜点)-联系我,我们会让它实现。