Php Redis:键*的结果是如何排序的?
我有一个非常简单的php redis应用程序,它在某些事件中创建键。所有钥匙都是计数器,过期时间为24小时。基本上每个键都有24小时的滚动窗口来收集一些统计数据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,
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,不知道他在用什么客户:)顺便说一句,偶尔在特拉维夫北部喝杯咖啡会很好。我们对客户的看法很公正。我很乐意这样做&选择账单(当然,假设没有甜点)-联系我,我们会让它实现。