Redis: possibile far scadere un elemento in un array o in un insieme ordinato?


124

Al momento è possibile far scadere solo un'intera coppia chiave / valore? E se volessi aggiungere valori a una struttura di tipo Elenco e farli rimuovere automaticamente 1 ora dopo l'inserimento. È attualmente possibile o richiederebbe l'esecuzione di un cron job per eseguire l'eliminazione manuale?

Risposte:


76

Al momento è possibile far scadere solo un'intera coppia chiave / valore?

Per quanto ne so, e anche in base ai comandi chiave e al documento sulla scadenza , attualmente è possibile impostare la scadenza solo su una chiave specifica e non sulla sua struttura dati sottostante. Tuttavia c'è una discussione sui gruppi di Google su questa funzionalità con soluzioni alternative delineate.


1
Qualche idea a partire da ora luglio 2016 hanno supportato questo nella versione più recente?
Kamran Shahid

1
@KamranShahid ha qualcosa su questo ??
Prakash Kumar

1
Nop Prakash non ancora.
Kamran Shahid

3
Questa risposta è ancora pertinente dopo 8 anni?
simo

2
Sì, la scadenza dell'elemento nelle strutture di dati nidificate non è supportata da Redis.
Itamar Haber

94

C'è uno schema comune che risolve abbastanza bene questo problema.

Usa set ordinati e usa un timestamp come punteggio. È quindi banale eliminare gli elementi per intervallo di punteggio, che potrebbe essere fatto periodicamente, o solo su ogni scrittura, con le letture che ignorano sempre gli elementi fuori intervallo, leggendo solo un intervallo di punteggi.

Maggiori informazioni qui: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs


7
Bella soluzione, ma vorrei che Redis lo supportasse correttamente. È un requisito comune e non dovrebbe richiedere soluzioni alternative complesse.
UpTheCreek

14
Non so, sono davvero felice che si attengano alle loro armi: espandere il set di funzionalità in modi che non vogliono o non pianificano significa fare sacrifici di design. Costruire funzionalità aggiuntive sulla parte superiore sembra la soluzione perfetta e lascia Redis a fare quello che fa, in modo eccellente
Kieren Johnstone

redis è perfetto così com'è: design semplice e pulito e comportamento prevedibile che si traduce in
prestazioni

1
Soluzione meravigliosa, siamo stati anche in grado di utilizzare un semplice elenco fifo in cui abbiamo tenuto un elenco e abbiamo semplicemente preso i primi 5 elementi, e quando l'elenco è cresciuto più di 5 + N a seconda della scalabilità, cancelliamo la chiave e ricominciamo da capo. Semplice, facile ed esattamente come dovrebbero essere gli algoritmi Redis. Questo algoritmo offre al nostro sistema di segnalazione tutto il tempo necessario per interrogare l'elenco e vedere con quali dispositivi gli utenti accedono. D'accordo con @KierenJohnstone, Redis è progettato per creare architettura attorno ad esso ed è perfetto così com'è.
Ligemer

1

Mi sono imbattuto in un metodo diverso per gestirlo, non so se è utile per qualcuno di voi, ma ecco qui:

L'hash e il set ordinato sono collegati da una guida.

  1. Ho un hash che scadrà tra "x" secondi
  2. Ho un set ordinato che viene utilizzato per le query con intervallo
  3. I dati per entrambi vengono aggiunti in una transazione, quindi se uno fallisce, falliscono entrambi.
  4. Su una query con intervallo, usa "EXISTS" per vedere se il valore con hash esiste mentre i risultati vengono ripetuti
  5. Se non esiste, è scaduto, quindi elimina l'elemento dall'insieme ordinato
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.