Exclui as chaves de redis que ficaram inativas por 30 dias

3

Instalei um aplicativo da Web chamado scrumblr , que usa redis como banco de dados.

O que estou tentando fazer é excluir todas as chaves que ficaram inativas por 30 dias ou que não foram acessadas em 30 dias.

eu corri

redis-cli KEYS*

Que retorna todas as chaves, embora não mostre um timestamp.

Existe um script ou um comando que eu possa executar todos os dias em uma hora específica, que procuraria todas as chaves inativas e as excluiria?

    
por Muji Sayed 20.04.2015 / 21:17

2 respostas

3

Você pode tirar vantagem do comando OBJECT IDLETIME , que retorna o número de segundos desde que o objeto armazenado na chave especificada está ocioso (não solicitado por operações de leitura ou gravação).

Exemplo de código da seguinte forma:

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

Na sua situação, você pode substituir redis-cli -p 6379 por:

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

    
por 14.04.2016 / 11:29
1

Resposta curta: não.

Resposta longa: você pode iterar sobre as suas chaves (a saída de KEYS - não usa esse comando em produção! Use SCAN ), chame cada tecla em OBJECT IDLETIME comando e excluir com base na resposta.

Resposta mais longa: você pode realmente alterar a fonte do scrumplr para que o Redis expire automaticamente as chaves após 30 dias. O arquivo suspeito parece ser lib/data/redis.js e o patch requer simplesmente o uso dos comandos SET...EX ou EXPIRE em cada chave depois que ela é gravada em (sala, quadro, cartão).

    
por 21.04.2015 / 00:37