MST

星途 面试题库

面试题:缓存设计之分布式系统缓存一致性基础

在分布式系统中,简述缓存一致性的概念,以及常见的导致缓存一致性问题的场景有哪些?
14.5万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存一致性概念

在分布式系统中,缓存一致性指的是多个缓存副本之间以及缓存与数据源之间的数据一致性状态。当数据在数据源发生变化时,相关的缓存副本也需要及时更新,以确保所有对该数据的访问,无论是从缓存还是数据源获取,都能得到相同的最新值。如果缓存与数据源或各个缓存副本之间的数据不一致,就可能导致系统读取到过期或错误的数据,影响系统的正确性和可靠性。

常见导致缓存一致性问题的场景

  1. 缓存更新策略不当
    • 先更新缓存,后更新数据库:在这种策略下,如果更新缓存成功,但更新数据库失败,那么此时缓存中的数据是新的,而数据库中的数据还是旧的。后续其他进程读取数据时,从缓存中读取到新数据,就会与数据库不一致。
    • 先删除缓存,后更新数据库:如果在删除缓存后,更新数据库前,有其他进程读取数据,此时缓存已被删除,该进程会从数据库读取旧数据并重新写入缓存,随后数据库更新成功,就会导致缓存与数据库不一致。
    • 先更新数据库,后删除缓存:如果更新数据库成功后,删除缓存操作失败,缓存中依旧是旧数据,也会导致不一致。并且如果在更新数据库和删除缓存之间,有其他进程读取数据,同样会将旧数据重新加载到缓存,造成不一致。
  2. 高并发读写场景
    • 在高并发环境下,多个写操作同时进行,可能会出现上述更新策略不当导致的缓存不一致情况。例如多个更新请求同时到达,先更新缓存、后更新数据库的策略下,可能部分更新缓存成功,部分更新数据库失败,使得缓存和数据库处于不一致状态。
    • 读写并发时,如果读操作在写操作更新数据库但未更新缓存期间进行,读操作会从缓存中读取到旧数据,导致数据不一致。
  3. 缓存失效 当缓存设置了过期时间,缓存过期后,如果有多个请求同时访问该数据,这些请求都会从数据库读取数据并更新缓存。但如果此时数据库中的数据在这些请求读取期间发生了变化,就会导致不同请求更新到缓存中的数据不一致。
  4. 分布式缓存集群
    • 节点故障:在分布式缓存集群中,如果某个缓存节点发生故障,该节点上缓存的数据可能丢失。当数据重新写入缓存时,如果没有正确处理,可能会导致缓存数据不一致。例如,新写入的数据与其他节点缓存的数据版本不一致。
    • 数据分片与迁移:在分布式缓存中,数据通常会根据一定的规则进行分片存储在不同节点上。当进行数据迁移(如集群扩展、收缩等情况)时,如果迁移过程出现问题,可能会导致部分数据在不同节点的缓存不一致。