2013-02-01 16 views
15

Mi chiedo se ci sia una funzione in redis che mi permetta di ottenere tutte le chiavi scadute (intendo un qualche tipo di evento, che mi dà l'opportunità di riprendere tutti i record di scadenza). Lo scopo è nel salvare i vecchi valori in un altro database. Ho sentito che è possibile utilizzare il meccanismo di pubblicazione, ma Google non può aiutarci con questa idea.Event on key expire

+0

non è lo stesso del link del commento precedente. quello riguarda le sessioni. questo post riguarda le chiavi volatili. – akonsu

risposta

18

La versione di sviluppo corrente di redis contiene una nuova funzionalità: notifiche dello spazio delle chiavi. Documentazione: http://redis.io/topics/notifications

notifiche spazio delle chiavi consente ai clienti di abbonarsi a Pub/canali Sub, al fine di ricevere gli eventi che interessano i dati Redis fissati in qualche modo.

Esempi di eventi che è possibile ricevere sono i seguenti:

  • Tutti i comandi che interessano una determinata chiave.
  • Tutte le chiavi ricevono un'operazione LPUSH.
  • Tutte le chiavi in ​​scadenza nel database 0.

Si spera, renderà a stabile presto.

BTW, non sarà molto utile per aiutare a salvare i valori delle chiavi scadute. Quando viene emesso un evento di scadenza, il valore è già sparito.

9

L'evento scaduto incorporato generato dalla notifica dello spazio dei tasti non è accurato. Vedere l'ultima sezione del http://redis.io/topics/notifications

chiavi con un tempo di vivere associati sono scaduti da Redis in due modi:

  1. Quando la chiave si accede da un comando e si trova ad essere scaduto.

  2. Via un sistema di fondo che cerca le chiavi scadute in background, modo incrementale, in modo da essere in grado di raccogliere anche le chiavi che non sono mai accesso.

Gli eventi scaduti vengono generati quando un tasto si accede e si trova ad essere scaduto da uno dei sistemi di cui sopra, di conseguenza non ci sono garanzie che il server Redis sarà in grado di generare il evento scaduto nel momento in cui la durata della chiave per vivere raggiunge il valore di zero. Se nessun comando punta alla chiave costantemente e ci sono molte chiavi con un TTL associato, può esserci un ritardo significativo tra l'ora in cui l'ora della chiave per la vita scende a zero e il momento in cui viene generato l'evento scaduto .

Per implementare completamente un evento in scadenza, è necessario implementarlo autonomamente. Ad esempio, utilizzando un elenco ordinato (o un albero AVL) ordinato in base al tempo di scadenza e leggendo continuamente la coda dell'elenco (unqueue). Se il lettore trova che il tempo di scadenza non è stato raggiunto, dorme (tempo di scadenza - ora). In questo modo la precisione può essere controllata entro 10 ms.

1

Utilizzare redis-scheduler.
Puoi trovarlo here

Problemi correlati