- 为什么用缓存:解决高并发访问,使用redis最为中间缓存,访问时先访问redis,有数据直接返回数据,没有数据则从数据库中加载数据写入缓存,在返回数据。
- 数据不一致的原因:
- 如果删除了redis缓存,还没来得及写进mysql,另一个线程就来读取,发现缓存为空,则去mysql中读取数据放入缓存,此时redis中为脏数据
- 如果先写了mysql,再删除缓存前,写mysql的线程死了,没有删除掉缓存,也会出现数据不一致的问题。
- 解决方案:
- 延时双删:主要目的是为了确保读请求结束,写请求可以删除读请求造成的缓存脏数据
- 先删除缓存
- 再写数据库
- 休眠500毫秒(具体根据业务来)
- 再次删除缓存
- 异步更新缓存:mysql的binlog增量订阅消费+消息队列+增量数据更新到redis
- 读redis:热数据基本都在redis
- 写mysql:增删改都操作mysql
- 更新redis数据:mysql的数据操作binlog,来更新到redis
- 延时双删:主要目的是为了确保读请求结束,写请求可以删除读请求造成的缓存脏数据
redis-mysql缓存一致性
最新推荐文章于 2024-03-10 18:50:15 发布