栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

如何保证数据库和缓存的一致性:

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何保证数据库和缓存的一致性:

由于缓存和数据库是分开的,无法做到原子性的同时进行数据修改,可能出现缓存更新失败,或者数据库更新失败的情况,这个时候出现数据不一致,影响前端业务。

1.先更新数据库,再更新缓存,这个时候缓存可能更新失败,读到老数据。 2.先删除缓存,再更新数据库,在高并发情况下,读操作可能还是会将旧数据读回缓存。 3.先更新数据库,再删除缓存。也存在缓存删除失败的可能。 最经典的缓存+数据库读写模式: 读的时候,先读缓存,缓存没有的话,就读数据库,然后去除数据放入缓存,同时返回响应。更新的时候,先更新数据库,然后删除缓存。

删除更加轻量,延迟加载的一种实现,更新的时候可能涉及到多个表,比较耗时

延时双删:先删除缓存,再更新数据库,休眠1s,再次删除缓存。写数据的休眠时间则在读数据业务逻辑的耗时基础上,加几百ms即可。这么做的目的,就是确保读请求结束,写请求可以删除读请求造成的缓存脏数据,并发还是可能读到旧值覆盖缓存。

终极方案: 将访问操作串行化 1.先删除缓存,将更新数据库的操作放进有序队列中 2.从缓存查不到的查询操作,都进入有序队列 会面临的问题: 1.读请求积压,大量超时,导致数据库的压力:限流,熔断 2.如何避免大量请求积压:将队列水平拆分,提高并行度。 3.保证相同请求路由正确。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号