Redis: possível expirar um elemento em uma matriz ou conjunto classificado?

124

No momento, é possível expirar apenas um par de chave / valor inteiro? E se eu quiser adicionar valores a uma estrutura do tipo Lista e removê-los automaticamente 1 hora após a inserção. Isso é possível no momento ou seria necessário executar um trabalho cron para fazer a limpeza manualmente?

randombits
fonte

Respostas:

76

No momento, é possível expirar apenas um par de chave / valor inteiro?

Até onde eu sei, e também de acordo com os principais comandos e documentos sobre expiração , atualmente você pode definir a expiração apenas para uma chave específica e não para a estrutura de dados subjacente. No entanto, há uma discussão nos grupos do Google sobre essa funcionalidade com soluções alternativas descritas.

yojimbo87
fonte
1
Alguma idéia a partir de julho de 2016 eles suportaram isso na versão mais recente?
Kamran Shahid
1
@KamranShahid tem alguma coisa sobre isso ??
Prakash Kumar #
1
Nop Prakash ainda não.
Kamran Shahid
3
Essa resposta ainda é relevante após 8 anos?
simo
2
Sim, a expiração do elemento em estruturas de dados aninhadas não é suportada pelo Redis.
Itamar Haber
94

Existe um padrão comum que resolve esse problema muito bem.

Use conjuntos classificados e use um carimbo de data e hora como a pontuação. É então trivial excluir itens por faixa de pontuação, o que pode ser feito periodicamente, ou apenas em cada gravação, com as leituras sempre ignorando os elementos fora da faixa, lendo apenas uma faixa de pontuações.

Mais aqui: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs

Adriaan Pelzer
fonte
7
Solução agradável, mas desejo que os redis suportem isso corretamente. É um requisito comum e não deve exigir soluções complexas.
UpTheCreek 23/02
14
Não sei, estou muito feliz que eles se atenham - expandir o recurso de maneiras que não querem ou não planejam significa fazer sacrifícios de design. Construção de funcionalidade adicional no topo soa como a solução perfeita, e as folhas Redis para fazer o que ele faz, excelente
Kieren Johnstone
Redis é perfeito como ele é - simples, design limpo e comportamento previsível que resulta em mais do que excelente preformance
let4be
1
Maravilhosa solução, também conseguimos usar uma lista simples em que mantivemos uma lista e simplesmente pegamos os 5 primeiros elementos, e quando a lista cresceu acima de 5 + N, dependendo da escalabilidade, excluímos a chave e recomeçamos. Simples, fácil e exatamente como os algoritmos Redis devem ser. Esse algoritmo dá ao nosso sistema de relatórios bastante tempo para consultar a lista e ver com quais dispositivos os usuários se conectam. De acordo com @KierenJohnstone, o Redis foi projetado para criar arquitetura em torno dele e é perfeito da maneira que é.
Ligemer
1

Me deparei com um método diferente de lidar com isso, não sei se é útil para qualquer um de vocês, mas aqui vai:

O hash e o conjunto classificado são vinculados por um guia.

  1. Eu tenho um hash definido para expirar em 'x' segundos
  2. Eu tenho um conjunto classificado que é usado para consultas à distância
  3. Os dados de ambos são adicionados em uma transação; portanto, se um falhar, ambos falharão.
  4. Em uma consulta à distância, use 'EXISTS' para ver se o valor do hash existe, pois os resultados são iterados sobre
  5. Se ele não existir, expirou, exclua o item do conjunto classificado
JEPrice
fonte