删除30天不活动的redis密钥

删除30天不活动的redis密钥

我已经安装了一个名为的网络应用程序scrumblr,它用作redis数据库。

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

我跑了

redis-cli KEYS*

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

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

答案1

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

示例代码如下:

#!/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;

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

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

答案2

简短的回答:不。

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

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

相关内容