MST

星途 面试题库

面试题:缓存设计之缓存一致性基础问题

请简要阐述在后端开发中,常见的缓存一致性模型有哪些,并说明每种模型在数据读写操作上是如何保证一致性的?
46.8万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

常见缓存一致性模型

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