Mi piacerebbe sapere quale sarebbe un approccio migliore per invalidare / aggiornare gli oggetti cache.
Prerequisiti
- Avere un server memcached remoto (che funge da cache per più applicazioni)
- Tutti i server sono ospitati da Azure (regioni di affinità, stessi data center)
- La dimensione dell'oggetto della cache varia da 200 byte a 50 kilobyte
Approccio 1 (memorizza nella cache al più presto)
- L'oggetto A è stato creato - > memorizza nel database e memorizza nella cache
- Oggetto A richiesto dal client - > controlla la cache per l'esistenza, altrimenti recupera dal database e memorizza nella cache
- L'oggetto A viene aggiornato - > archivia nel database, memorizza nella cache
L'approccio 1 sembra essere più semplice. Se qualcosa viene creato, inserisci la cache al più presto. Indipendentemente da qualcuno ne avrà bisogno.
Approccio 2 (archivio cache pigro)
- L'oggetto A è stato creato - > archivia nel database
- Oggetto A richiesto dal client - > controlla la cache per l'esistenza, altrimenti recupera dal database e memorizza nella cache
- L'oggetto A viene aggiornato - > memorizza nel database, elimina la chiave nella cache
L'approccio 2 sembra essere più consapevole della memoria. In questo approccio solo gli elementi richiesti vanno nella cache.
Domanda 1: Considerando le prestazioni, quale sarebbe un approccio migliore? La memoria e la CPU non contano ancora.
Domanda 2: I miei pensieri sono una specie di ottimizzazione prematura?
Domanda 3: altri pensieri? Altri approcci?