在Redis中查找非过期密钥

Dur*_*sun 25 redis

在我的设置中,该info命令显示以下内容:

[keys] => 1128
[expires] => 1125
Run Code Online (Sandbox Code Playgroud)

我想找到没有失效日期的那3个密钥.我已经检查过文档无济于事.有任何想法吗?

Way*_*Lue 53

从我现在找不到的网站修改.

redis-cli keys  "*" | while read LINE ; do TTL=`redis-cli ttl "$LINE"`; if [ $TTL -eq  -1 ]; then echo "$LINE"; fi; done;
Run Code Online (Sandbox Code Playgroud)

编辑:注意,这是一个阻止调用.

  • 没有到期密钥(而不是"3600"),TTL为"-1". (7认同)
  • 请确保双引号`$ TTL`.如果其中一个键有空格,bash会给出`bash:[:太多的参数`错误.此外,由于这个错误,我不得不使用`==`over` -eq`:`bash:[:ERR'ttl'命令的错误参数数量:整数表达式expect`. (3认同)
  • [Redis KEYS 命令](https://redis.io/commands/KEYS) 可以停止 Redis 处理请求。使用 SCAN 仅占用大约 10% 的引擎 CPU,具体取决于您的架构。 (3认同)
  • 在远程 redis 主机上尝试此操作时出现错误。我连接到远程主机,然后根据提示运行:`keys "*" | 在阅读 LINE 时;do TTL=`redis-cli ttl $LINE`; 如果 [ $TTL -eq -1 ]; 然后回显“$LINE”;fi; done;` 但我收到“无效参数”错误 (2认同)

tea*_*urn 5

Wayne Lue的答案运行了,但是使用Redis警告的Redis KEYS命令:

警告:将KEYS视为命令,仅应格外小心地用于生产环境。在大型数据库上执行时,可能会破坏性能。

Redis文档建议使用SCAN。

redis-cli --scan | while read LINE ; do TTL=`redis-cli ttl "$LINE"`; if [ $TTL -eq  -1 ]; then echo "$LINE"; fi; done;
Run Code Online (Sandbox Code Playgroud)

如果要扫描特定的密钥模式,请使用:

 redis-cli --scan --pattern "something*"
Run Code Online (Sandbox Code Playgroud)