我已经安装了一个名为的网络应用程序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