全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

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

发布时间:2022-09-21 15:57:00
发布人:qyf

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

  1. 淘汰缓存

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

  2. 选择先淘汰缓存,再更新数据库

  假如先更新数据库再淘汰缓存,如果淘汰缓存失败,那么后面的请求都会得到脏数据,直至缓存过期。

  假如先淘汰缓存再更新数据库,如果更新数据库失败,只会产生一次缓存穿透,相比较而言,后者对业务则没有本质上的影响。

  3. 延时双删策略

  如下场景:同时有一个请求A进行更新操作,另一个请求B进行查询操作。

  我们按如下步骤执行:

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

  请求B查询发现缓存不存在

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

  请求B将旧值写入缓存

  请求A将新值写入数据库

  次数便出现了数据不一致问题,此时我们可以采用延时双删策略得以解决。

public void write(String key,Object data){
redisUtils.del(key);
db.update(data);
Thread.Sleep(100);
redisUtils.del(key);
}

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

  4. 数据库读写分离的场景

  假如有如下场景:

  两个请求,一个请求A进行更新操作,另一个请求B进行查询操作。

  我们按如下步骤执行:

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

  请求A将数据写入数据库了,

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

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

  请求B将旧值写入缓存

  数据库完成主从同步,从库变为新值

  依旧采用延时双删策略解决此问题。

相关文章

什么是域控制器?

什么是域控制器?

2023-10-15
图卷积网络和self-attention有什么区别?

图卷积网络和self-attention有什么区别?

2023-10-15
深度学习模型权重h5、weights、ckpt、pth有什么区别?

深度学习模型权重h5、weights、ckpt、pth有什么区别?

2023-10-15
机器学习中Inference和predict的区别是什么?

机器学习中Inference和predict的区别是什么?

2023-10-15

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取