MST

星途 面试题库

面试题:Redis缓存减轻MySQL写压力场景下,如何处理缓存与数据库数据一致性问题

在利用Redis缓存减轻MySQL写压力的实际应用中,假设发生数据更新操作,描述一下常见的保证Redis缓存数据与MySQL数据库数据一致性的策略,并分析每种策略的优缺点。
25.5万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

先更新数据库,再更新缓存

  1. 策略描述:在执行数据更新操作时,先对MySQL数据库进行更新,成功后再更新Redis缓存中的数据。
  2. 优点
    • 逻辑简单,易于理解和实现。在正常情况下,能够保证数据库和缓存数据的一致性。
  3. 缺点
    • 并发问题:在高并发场景下,如果有多个更新操作同时进行,可能会出现缓存更新顺序错乱的情况。例如,请求A先更新数据库,请求B后更新数据库,但请求B更新缓存的操作比请求A快,就会导致缓存中的数据不是最新的数据库数据。
    • 性能问题:每次更新都需要操作数据库和缓存,增加了系统的响应时间,特别是在缓存和数据库不在同一台服务器时,网络开销会更大。

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

  1. 策略描述:在数据更新操作时,首先删除Redis缓存中的数据,然后再对MySQL数据库进行更新。
  2. 优点
    • 解决并发更新缓存错乱问题:相较于先更新数据库再更新缓存,这种方式避免了缓存更新顺序错乱的问题。因为先删除缓存,后续读取数据时会从数据库中重新加载并更新缓存,保证缓存数据是最新的。
    • 性能较好:删除缓存操作通常比更新缓存操作要快,减少了整体的响应时间。
  3. 缺点
    • 缓存击穿问题:如果在删除缓存和更新数据库之间,有大量的读请求进来,由于缓存中数据已删除,这些请求都会直接打到数据库上,可能会导致数据库压力瞬间增大,甚至崩溃。
    • 数据短暂不一致:在删除缓存后,更新数据库前这段时间内,如果有读请求,读到的是旧数据,会出现短暂的数据不一致情况。

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

  1. 策略描述:执行数据更新操作时,先更新MySQL数据库,更新成功后再删除Redis缓存中的数据。
  2. 优点
    • 并发性能较好:在高并发场景下,这种策略相对稳定。因为数据库的写操作本身就是串行化的(通过事务等机制保证数据一致性),先更新数据库后删除缓存,不会像先更新缓存那样出现并发更新缓存的一致性问题。
    • 数据最终一致性:最终能保证缓存和数据库的数据一致性,后续读请求会重新加载最新数据到缓存。
  3. 缺点
    • 数据短暂不一致:同先删除缓存再更新数据库一样,在更新数据库后删除缓存前,读请求可能读到旧的缓存数据,造成短暂的数据不一致。
    • 缓存击穿风险:如果在更新数据库成功后,删除缓存失败,也会出现缓存击穿问题,大量读请求直接访问数据库。需要引入重试机制或补偿机制来解决删除缓存失败的情况。