缓存与数据库一致性保证
问题来了:
当数据money发生变化的时候: ①是更新缓存中的数据,还是淘汰缓存中的数据呢? ②是先操纵数据库中的数据再操纵缓存中的数据,还是先操纵缓存中的数据再操纵数据库中的数据呢?
更新缓存 VS 淘汰缓存
问:数据变化时,到底是选择更新缓存还是淘汰缓存?
答:主要取决于更新缓存的复杂度。
- 更新缓存的代价很小,此时我们应该更倾向于更新缓存,以保证更高的缓存命中率
- 如果余额是通过很复杂的数据计算得出来的,倾向于删除缓存。
- 淘汰缓存操作简单,并且带来的副作用只是增加了一次cache miss,建议作为通用的处理方式。
先操作数据库 vs 先操作缓存
当写操作发生时,假设淘汰缓存作为对缓存通用的处理方式,又面临两种抉择: ①先写数据库,再删除缓存。 ②先删除缓存,再写数据库。
我们究竟采用哪种时序呢?
- 对于一个不能保证事务性的操作,一定涉及“哪个任务先做,哪个任务后做”的问题。
- 解决这个问题的方向是:如果出现不一致,谁先做对业务的影响较小,就谁先执行。
- 思考:两者谁先执行的影响最小?