2016-03-23 12 views
9

In che modo Redis implementa la scadenza delle chiavi? Da here ho appreso che Redis memorizza il tempo in cui la chiave scadrà, ma in che modo viene implementata esattamente?Come vengono cancellate le nuove chiavi?

+0

il titolo e la questione non corrispondono. cosa stai chiedendo? come fa il rosso a scadere delle chiavi? o se è possibile scadere gli oggetti in un elenco? –

+0

@Not_a_Golfer Ho cambiato il titolo, mi dispiace per la confusione. –

risposta

24

In breve - per ogni oggetto redis, c'è un tempo di scadenza. A meno che non imposti la scadenza dell'oggetto, quel tempo è "mai".

Ora, lo stesso meccanismo di scadenza è semi-pigro. Scadenza pigra significa che in realtà non scadono gli oggetti finché non vengono letti. In questo caso leggendo un oggetto ne controlliamo la data di scadenza, e se è nel passato, non restituiamo nulla ed eliminiamo l'oggetto mentre ci siamo. Ma il problema è che se una chiave non viene mai toccata, occupa solo memoria senza motivo.

Così Redis aggiunge un secondo livello di scadenza attiva casuale. Legge solo i tasti casuali sempre e quando viene toccata una chiave scaduta viene cancellata in base al meccanismo pigro. Questo non influisce sul comportamento in scadenza, aggiunge semplicemente "garbage collection" delle chiavi scadute.

Naturalmente l'implementazione effettiva è più complicata di questa, ma questa è l'idea principale.

Si può leggere di più su di esso qui: http://redis.io/commands/expire

e il codice sorgente per il ciclo di scadenza attiva può essere trovato qui: https://github.com/antirez/redis/blob/unstable/src/server.c#L781