MST

星途 面试题库

面试题:Redis缓存与MySQL数据一致性实现中常见的缓存更新策略有哪些

在处理Redis缓存与MySQL数据一致性问题时,通常会采用一些缓存更新策略。请简要描述至少两种常见的缓存更新策略,并说明它们各自的优缺点。
36.2万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

1. 先更新数据库,再删除缓存

  • 优点
    • 操作相对简单,在大多数场景下能保证数据一致性。因为先更新数据库保证了数据的持久化存储是最新的,然后删除缓存,使得下一次读取时会从数据库加载最新数据并重新写入缓存。
  • 缺点
    • 如果在更新数据库成功后,删除缓存失败,就会导致缓存中的数据为旧数据,从而出现数据不一致。例如网络抖动等原因可能导致删除缓存操作失败。
    • 在高并发场景下,可能会出现缓存与数据库短暂不一致。比如在更新数据库和删除缓存之间,有大量读请求进来,这些请求读取到的还是旧的缓存数据。

2. 先删除缓存,再更新数据库

  • 优点
    • 能尽快让缓存失效,减少读取旧数据的可能性。在更新数据前先删除缓存,后续请求会去数据库获取最新数据并写入缓存。
  • 缺点
    • 如果在删除缓存后,更新数据库失败,此时缓存中已无数据,而数据库中的数据也未更新,可能导致一段时间内业务获取到的数据是缺失的(直到缓存被重新填充)。
    • 同样在高并发场景下,存在问题。比如一个写请求删除缓存后,还未来得及更新数据库,此时一个读请求进来,发现缓存不存在,就会从数据库读取旧数据并写入缓存,然后写请求更新数据库,这样就导致缓存中的数据是旧数据,出现数据不一致。

3. 读写锁策略

  • 优点
    • 可以有效保证数据一致性。通过读写锁,写操作获取写锁,此时不允许读操作,写操作完成后释放锁;读操作获取读锁,多个读操作可以同时进行,但写操作必须等待所有读锁释放。
    • 在一些对数据一致性要求极高的场景下非常适用,能避免并发读写造成的数据不一致问题。
  • 缺点
    • 性能会受到一定影响。因为加锁操作会增加系统开销,尤其是在高并发读写频繁的场景下,锁的竞争会比较激烈,导致系统吞吐量下降。
    • 实现相对复杂,需要考虑锁的粒度、锁的超时时间等诸多因素,增加了开发和维护的难度。