浅谈缓存一致性问题

浅谈缓存一致性问题

  • 一、为什么使用缓存?
  • 二、保证缓存一致性的方案(写操作)
    • 1.先操作数据库,再删缓存
    • 2.先删缓存,再操作数据
  • 三、总结


一、为什么使用缓存?

现在大多数互联网公司使用缓存通常都是为了**缓存一些热点数据,降低数据库的访问压力**,提升系统的响应速度,为用户提供更好的产品体验。

二、保证缓存一致性的方案(写操作)

1.先操作数据库,再删缓存

如果先操作数据库,再删除缓存,当原子性被破坏:
  1. 操作数据库成功;
  2. 删除缓存失败;

此时,造成数据库中数据和缓存数据不一致

解决方案:
有方案建议redis操作进行失败重试,设置重试次数。但当超过重试次数后,仍无法解决数据不一致问题。

不推荐此方案。

2.先删缓存,再操作数据

如果先删除缓存,再操作数据库,当原子性被破坏:
  1. 删除缓存成功;
  2. 操作数据库失败;

此时,数据库中数据还是之前的数据,数据保持一致,对业务无影响。下次查询会多命中一次cache miss。
但在高并发场景下,由于数据库主从同步延迟,可能造成缓存和数据库数据不一致。

解决方案:
在主从同步延迟期间,可以选择性的读主库,通过设置redis记录当记录存在时读取主库,不存在时仍读取从库,其中失效时间设定为主从同步延迟时间。

三、总结

推荐采用:
  1. 先删除缓存,再操作数据;
  2. 并发少的情况下,可以监听binlog参数对应缓存;
  3. 并发高为避免主从延迟同步造成的数据不一致,可以采用选择性读主的方式。

你可能感兴趣的:(redis,数据库,缓存,数据库,redis)