In Redis è possibile impostare TTL (tempo di permanenza) non per un tasto specifico, ma per un membro per un set?TTL per un membro dell'insieme
Sto utilizzando una struttura per i tag proposta dalla documentazione Redis: i dati sono coppie chiave-valore semplici e le tag sono insiemi contenenti chiavi corrispondenti a ciascun tag, ad es.
> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1
La chiave id:id_1
scade come previsto, ma non vedo un modo efficiente per rimuovere l'elemento corrispondente dal set tag:tag_1
.
Un modo in cui sono venuto è utilizzare un cron job contenente uno script che rimuova periodicamente le chiavi scadute dagli insiemi - aggiungendo tutti i nomi dei tag a un altro set e quindi iterando attraverso tutti i tag, quindi tutti gli id corrispondenti a ciascuno etichettare e verificare se esiste la chiave corrispondente - in caso contrario, chiamando SREM
.
Non penso che sarà un modo efficiente e mi piacerebbe eventualmente mantenere i tag il più puliti possibile, perché la dimensione dei set influenzerà probabilmente le prestazioni di ricerca di più tag (SINTER
). Esiste un modo più "interno"?
Sì, è un modo decente e probabilmente gestirò il problema con qualcosa di simile. Poiché l'esistenza di membri scaduti nei set di tag non è un problema in nessun altro modo delle prestazioni, molto probabilmente userò un cron istead di un demone periodicamente - per limitare i sondaggi a un minimo sufficiente. – Przemek