面试题答案
一键面试常见缓存一致性模型
- 写后失效(Write - Behind):
- 写操作:应用程序向缓存写入数据,同时标记数据为脏数据,缓存系统异步地将脏数据写入持久化存储。在这个过程中,由于数据先更新在缓存,可能会出现短时间内缓存和持久化存储数据不一致,但随着异步写操作完成最终会达到一致。
- 读操作:直接从缓存读取数据,只要缓存中存在对应数据就返回。如果缓存中没有(缓存失效),则从持久化存储读取,同时将数据更新到缓存。
- 写前失效(Write - Through):
- 写操作:应用程序向缓存写入数据时,同时立即将数据写入持久化存储。这样能保证缓存和持久化存储的数据几乎实时一致,因为每次写操作都同步更新两者。
- 读操作:先从缓存读取,若缓存命中则直接返回数据;若未命中,从持久化存储读取并将数据加载到缓存后返回。
- 读写锁(Read - Write Lock):
- 写操作:在进行写操作前获取写锁,写锁获取成功后,其他读写操作都被阻塞,直到写操作完成释放写锁。这样能确保在写操作期间,不会有其他操作干扰,从而保证数据一致性。
- 读操作:读操作获取读锁,只要没有写锁被持有,多个读操作可以同时进行,因为读操作本身不会改变数据,所以不会产生一致性问题。但如果有写锁存在,读操作会被阻塞,直到写锁释放。
- 同步双写(Synchronous Double Write):
- 写操作:应用程序同时向缓存和持久化存储写入数据,只有当两者都成功写入后,写操作才算完成。这种方式能保证缓存和持久化存储的数据一致性,但由于要等待两个写操作都完成,性能相对较低。
- 读操作:同一般的缓存读取方式,先从缓存读取,若命中则返回;未命中则从持久化存储读取并更新缓存。