web-dev-qa-db-ja.com

30日間使用されなかったRedisキーを削除する

データベースとしてscrumblrを使用するredisというWebアプリをインストールしました。

私がしようとしていることは、30日間非アクティブであるか、30日間アクセスされていないすべてのキーを削除することです。

私は走った

redis-cli KEYS*

タイムスタンプは表示されませんが、すべてのキーが返されます。

毎日特定の時間に実行できるスクリプトまたはコマンドはありますか?これは、すべての非アクティブなキーを探し、それらを削除しますか?

6
Muji Sayed

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;

あなたの状況では、redis-cli -p 6379と:

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

6
fibonacci

短い答え:いいえ。

長い答え:キーを反復処理できます(KEYSの出力-本番環境ではそのコマンドを使用しないでください!SCANの代わりに)、各キーに対してOBJECT IDLETIMEコマンドを呼び出し、応答に基づいて削除します。

より長い答え:実際にscrumplrの source を変更して、Redisが30日後に自動的にキーを期限切れにするようにすることができます。疑わしいファイルはlib/data/redis.jsであるように見え、パッチは(部屋、ボード、カード)に書き込まれた後、各キーに対してSET...EXまたはEXPIREコマンドを使用するだけで済みます。

2
Itamar Haber