Redis
 sql >> Database >  >> NoSQL >> Redis

In che modo redis scadono le chiavi?

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

Ora, lo stesso meccanismo di scadenza è semi-pigro. Scadenza pigra significa che gli oggetti non scadono effettivamente finché non vengono letti. Quando leggiamo un oggetto, controlliamo il suo timestamp di scadenza e, se è nel passato, non restituiamo nulla ed eliminiamo l'oggetto mentre ci siamo. Ma il problema è che se un tasto non viene mai toccato, occupa solo memoria senza motivo.

Quindi Redis aggiunge un secondo livello di scadenza attiva casuale. Legge solo chiavi casuali tutto il tempo e quando viene toccata una chiave scaduta viene eliminata in base al meccanismo pigro. Ciò non influisce sul comportamento di scadenza, aggiunge semplicemente la "raccolta dei rifiuti" di chiavi scadute.

Ovviamente l'implementazione effettiva è più complicata di così, ma questa è l'idea principale.

Puoi leggere di più a riguardo qui:http://redis.io/commands/expire

E il codice sorgente per il ciclo di scadenza attivo può essere trovato qui:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98