~
My notes/mistakes/... when using cache (mainly Redis) from time to time
My default strategy is:
sequenceDiagram
participant other
participant service
participant cache
participant db
other ->> service: get data
activate service
service ->> cache: get data
alt exist in cache
service -->> other: return data
else not exist in cache
service ->> db: get data
alt exist data in db
service -->> other: return data
else not exist data in db
service -->> other: return error not found
end
end
deactivate service
other ->> service: set data
activate service
service ->> db: set data
service ->> cache: set data
deactivate service
It's good for general cases, for example with CRUD action.
The bad things happen when cache and database are not consistent. For example what happen if writing database OK then writing cache failed? Now database has new value, but cache has old value Then when we read again, we read cache first with old value, and that is disaster.