Solo per re-cape pattern di cache-aside definisce i seguenti passaggi durante il recupero e l'aggiornamento dei dati.
Recupero elemento
- Restituisce l'oggetto dalla cache se trovato in esso.
- Se non si trova nella cache, leggi dall'archivio dati.
- Metti l'elemento letto nella cache e restituiscilo.
Aggiornamento elemento
- Scrivi l'elemento nell'archivio dati.
- Rimuovi la voce corrispondente dalla cache.
Funziona perfettamente in quasi tutti i casi, ma sembra fallire in uno scenario teorico.
Che cosa succede se il passaggio 1 & 2 di elemento di aggiornamento , si verificano tra il punto 2 e il punto 3 di elemento di recupero . In altre parole, considera che inizialmente il data store avesse il valore 'A' e non fosse nella cache. Quindi, quando recuperiamo l'oggetto, leggiamo "A" dall'archivio dati, ma prima di mettere nella cache, l'elemento è stato aggiornato a "B" in un altro thread (quindi "B" è stato scritto nell'archivio dati e ha cercato di rimuovere la voce dalla cache , che non era lì in quel momento). Ora, quando il thread di recupero inserisce l'elemento nella cache (cioè "A"). Quindi ora 'A' rimarrà memorizzato nella cache e ulteriori recuperi restituiranno dati non aggiornati, fino a quando l'elemento non scade o viene aggiornato di nuovo.
Quindi mi manca qualcosa qui, la mia comprensione del modello è sbagliata. O che lo scenario è praticamente impossibile, e non c'è bisogno di preoccuparsene.
Inoltre vorrei sapere se è possibile apportare alcune modifiche nel modello per evitare questo problema.