Sto considerando uno schema per il passaggio di un valore di timestamp in una risposta memorizzata nella cache e quindi l'invio al servizio per eseguire l'invalidazione della cache. Mi chiedo se questo è un approccio valido. È un approccio comune?
Ad esempio, se ho un servizio che restituisce un record "Foo", che è una combinazione di ricerche e calcoli DB. Diciamo che Foo è identificato con una chiave. Per velocizzare le cose, voglio mantenere una cache locale dei risultati.
Il problema è che, attraverso un gruppo di server, le cache locali non verranno sincronizzate, perché i risultati calcolati cambieranno nel tempo.
Quindi il mio pensiero è:
- per una richiesta, calcola un Foo
- memorizza Foo nella cache locale con un timestamp "a partire da"
- restituisce il Foo insieme al timestamp "a partire da"
- quando il cliente vuole recuperare un Foo, passa la chiave e il timestamp "as of".
- se il server trova la chiave nella cache locale e il timestamp "come" nella cache è più recente del parametro "as of", restituisce la cache Foo con Foo, key e "as of" timestamp
- altrimenti ricalcola il Foo, lo metti in cache e restituisci (nuovo) Foo, chiave e (nuovo) "a partire da" timestamp
Il client dovrebbe tenere traccia sia della chiave che della data / ora "come", ma in sostanza controllerebbe essenzialmente quando le istanze di servizio aggiornano la propria cache locale, senza che le istanze di servizio comunichino l'una con l'altra o alcuno spazio di archiviazione di back-end per il coordinamento.
Se il client volesse forzare un aggiornamento della cache, potrebbe passare "a partire da" del valore massimo, il che forzerebbe un aggiornamento su qualsiasi istanza di servizio che colpisce.
Certamente potrei mettere un livello di cache davanti al mio servizio, e potrei anche salvare i risultati in una cache distribuita. Queste soluzioni hanno anche i loro problemi di replica dei dati e di scadenza. Ma ai fini di questa domanda, voglio davvero prendere in considerazione il caching locale e l'amp; considera le domande architettoniche separatamente.
Q: Funziona? È valido o buono utilizzare un parametro di timestamp come meccanismo per l'invalidazione della cache?