MST
星途 面试题库

面试题:缓存设计之中等难度:双写一致性的常见问题场景

在后端开发缓存设计中,缓存与数据库双写一致性可能会出现哪些常见问题场景?请简要描述。
22.7万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试
  1. 缓存更新失败,数据库更新成功
    • 场景描述:应用程序先更新数据库,然后尝试更新缓存。但在更新缓存时,由于网络故障、缓存服务异常等原因导致缓存更新失败。此时,数据库中的数据是新的,而缓存中的数据是旧的。后续读取数据时,如果先从缓存读取,就会读到旧数据,造成数据不一致。
  2. 数据库更新失败,缓存更新成功
    • 场景描述:应用程序先更新缓存,再更新数据库。然而在更新数据库的过程中,因为数据库故障、事务回滚等原因更新失败。这样就导致缓存中的数据是新的,而数据库中的数据还是旧的。若有其他操作依赖数据库的准确数据,就会出现问题。
  3. 并发读写导致的数据不一致
    • 读操作与写操作并发
      • 场景描述:假设线程A正在读取数据,此时缓存中存在旧数据。与此同时,线程B进行数据更新操作,先更新了数据库,在还未更新缓存时,线程A从缓存中读取到了旧数据。然后线程B更新缓存,后续的读操作会读到新数据,就出现了同一时间不同读操作读到不同数据的情况。
    • 两个写操作并发
      • 场景描述:线程A和线程B同时对数据进行更新。线程A先更新数据库,线程B也更新数据库。但在线程B更新数据库后,线程A更新缓存,线程B后更新缓存。这样缓存中的数据就是线程A的更新结果,与数据库中的最终状态不一致(数据库是线程B的更新结果)。
  4. 缓存过期导致的数据不一致
    • 场景描述:缓存设置了过期时间,当缓存过期后,应用程序读取数据时发现缓存中没有数据,于是从数据库读取。在从数据库读取数据并更新到缓存的这个过程中,如果有其他写操作同时在更新数据库,就可能导致缓存中的数据与数据库中的数据不一致。例如,读操作从数据库读取旧数据更新到缓存,紧接着写操作更新了数据库,但没有及时更新缓存,后续读操作就会读到缓存中的旧数据。