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응답에 따라 삭제됩니다.

더 긴 답변 : 실제로 scrumpr를 변경할 수 있습니다원천Redis가 30일 후에 자동으로 키를 만료시키도록 합니다. 의심되는 파일은 으로 보이는데 lib/data/redis.js, 패치는 (방, 보드, 카드) 쓴 후 각 키에 or 명령어만 사용하면 되는 문제인 것 같습니다 SET...EX.EXPIRE

관련 정보