关于缓存策略的总结

老师想问一个问题,这个缓存策略中说到如果cache 是read 和 write through的情形下,数据是Consistent的。我想问一下,这个说法是在考虑高并发的情况下么?如果在高并发的情况下,我感觉这种case 也是会发生数据不一致的现象。

比如说现在有两个线程,一个是读,一个是写,其中读发生了cache miss,写更新了cache,但是之前的读快一步拿到了的数据库中的老数据,回来覆盖掉了cache之前更新的新数据,那么这个时候,写势必会把db更新,那么这样结果会让相当一段时间内cache里面会出现老数据,DB中出现新数据,这样就不是一致的了。

提的很好,确实会有你提到的 Race condition 导致不一致。在缓存策略总结里提到的 Consistency 和 inconsistency 是相对而言,不是绝对的。
延伸一下,怎样可以增强这个 Consistency 保证呢?只要每次在读写 Cache 的时候都加锁即可,当有一个线程在读的时候,上锁,这样另一个线程就不能写了。在分布式情况下这个锁就需要是分布式锁。
如果认为这样的锁对性能降低太多,那么可以考虑降低 Consistency 要求,给 Cache 加一个 TTL,那么就能保证 eventual consistency。

1 个赞