删除 30 天不活动的 redis 键

Muj*_*yed 7 scripting cron database

我安装了一个名为的 Web 应用程序scrumblrredis用作数据库。

我试图做的是删除所有 30 天不活动或 30 天内未访问的密钥。

我跑了

redis-cli KEYS*
Run Code Online (Sandbox Code Playgroud)

它返回所有键,但它不显示时间戳。

是否有我可以每天在特定时间运行的脚本或命令,它会找出所有不活动的键并删除它们?

fib*_*cci 8

您可以利用OBJECT IDLETIME命令,该命令返回自存储在指定键的对象空闲(未由读取或写入操作请求)以来的秒数。

示例代码如下:

#!/bin/sh

redis-cli -p 6379 keys "*" | while read LINE ;
do
val=`redis-cli -p 6379 object idletime $LINE`;
if [ $val -gt $((30 * 24 * 60 * 60)) ];
then
  echo "$LINE";
  # del=`redis-cli -p 6379 del $LINE`;  # be careful with del
  # echo $del;
fi
done;
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可以替换redis-cli -p 6379为:

redis-cli -h redis_host -p redis_port -a redis_password


小智 3

简短的回答:不。

长答案:您可以迭代您的键(输出KEYS-不要在生产中使用该命令!而是使用SCAN),为每个键调用OBJECT IDLETIME命令并根据响应删除。

更长的答案:您实际上可以更改 scrumplr 的,让 Redis 在 30 天后自动使密钥过期。可疑文件似乎是,lib/data/redis.js并且补丁只需在写入(房间、板、卡)后在每个键上使用SET...EX或命令即可。EXPIRE