数据库
首页 > 数据库> > php – Redis:KEYS *的结果是如何排序的?

php – Redis:KEYS *的结果是如何排序的?

作者:互联网

我有一个非常简单的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控制台中),我怀疑按创建日期按时间顺序排列.然而,事实并非如此.它们都没有按字母顺序排序,按价值排序……

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

解决方法:

首先,不要使用键*它是不是为生产而设计的调试功能,你可以杀死你的服务器……
如果需要以安全的方式枚举DB中的所有键,请使用带LIMIT的SCAN功能.

无论如何,键或扫描的结果都没有以任何方式排序,结果的顺序与redis的哈希表的内部存储器结构有关.

关于你的php脚本,你可以通过一个命令来完成,没有存在set expireat只是运行:

SET键1 EX 86400 NX

EX 86400平均值从现在起86400(1天)后到期

NX意味着只有在密钥不存在时才创建密钥.

如果此命令返回(nil)运行常规INCR键,则表示该键已存在. BTW INCR命令不会删除您的过期设置.

标签:phpredis,php,redis
来源: https://codeday.me/bug/20190724/1523164.html