千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

首页 视频教程 培训课程 师资团队 技术干货 常见问题 面试题 职场就业 零基础学Java 行业资讯
【热点话题】 Java技术干货 Java学习教程 Java学习笔记 Java面试题 Java培训问答 Java培训机构哪些好 Java职场就业
当前位置:Java培训  >  java学习教程  >  怎么保证缓存和数据库数据的一致性?

怎么保证缓存和数据库数据的一致性?

来源:千锋教育
发布人:wjy
时间: 2022-10-10 09:51:00 1665366660

  1. 淘汰缓存:如果是较为复杂的数据时,进行缓存的更新操作就会变得异常复杂,因此一般推荐选择淘汰缓存,而不是更新缓存。

  2. 选择先淘汰缓存,再更新数据库,假如先更新数据库再淘汰缓存,如果淘汰缓存失败,那么后面的请求都会得到脏数据,直至缓存过期。假如先淘汰缓存再更新数据库,如果更新数据库失败,只会产生一次缓存穿透,相比较而言,后者对业务则没有本质上的影响。

怎么保证缓存和数据库数据的一致性?

  3. 延时双删策略 如下场景:同时有一个请求A进行更新操作,另一个请求B进行查询操作。 我们按如下步骤执行:

  (1. 请求A进行写操作,删除缓存

  (2. 请求B查询发现缓存不存在

  (3. 请求B去数据库查询得到旧值

  (4. 请求B将旧值写入缓存

  (5. 请求A将新值写入数据库,次数便出现了数据不一致问题,此时我们可以采用延时双删策略得以解决。public void write(String key,Object data){ redisUtils.del(key); db.update(data); Thread.Sleep(100); redisUtils.del(key); }

  这么做,可以将1秒内所造成的缓存脏数据,再次删除。这个时间设定可根据俄业务场景进行一个调节。

  4. 数据库读写分离的场景 假如有如下场景: 两个请求,

  一个请求A进行更新操作,另一个请求B进行查询操作。 我们按如下步骤执行:

  1. 请求A进行写操作,删除缓存

  2. 请求A将数据写入数据库了

  3. 请求B查询缓存发现,缓存没有值

  4. 请求B去从库查询,这时,还没有完成主从同步,因此查询到的是旧值

  5. 请求B将旧值写入缓存

  6. 数据库完成主从同步,从库变为新值 依旧采用延时双删策略解决此问题。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

最新文章NEW

相关推荐HOT

更多>>
开班信息
北京校区
  • 北京校区
  • 大连校区
  • 广州校区
  • 成都校区
  • 杭州校区
  • 长沙校区
  • 合肥校区
  • 南京校区
  • 上海校区
  • 深圳校区
  • 武汉校区
  • 郑州校区
  • 西安校区
  • 青岛校区
  • 重庆校区
  • 太原校区
  • 沈阳校区
  • 南昌校区
  • 哈尔滨校区

14天品质课程免费学

10年以上业内强师带你蜕变精英

提交领取