缓存层与数据库层数据同步

技术缓存层与数据库层数据同步 缓存层与数据库层数据同步缓存层与数据库层数据同步问题
在实际的业务开发中,为了避免大量请求直接操作数据库,我们会用redis做一个缓存层,用户的数据库请求先在redis中查

缓存层和数据库层之间的数据同步。

缓存层与数据库层数据同步问题

在实际的业务开发中,为了避免大量的请求直接操作数据库,我们将使用redis作为缓存层。用户的数据库请求将首先在redis中查询,一旦找到就会返回。如果找不到它们,它们将从数据库中获取数据来更新缓存,然后返回。

这涉及到如何保持缓存层和数据库层之间的数据一致。

一、旁路缓存方案

写入时,先修改数据库,然后删除相关缓存。

删除缓存而不更新的原因主要基于:

一些缓存更新涉及多个表之间的复杂操作,频繁更新会消耗性能。如果未删除缓存,则每次更新数据库时都会计算缓存,但删除缓存后,只有在下一个请求到来时才会计算缓存。

这种方案的缺点是,当删除缓存失败时,客户将读取旧数据,直到下一次数据更新。

二、双写一致方案

在更新数据库之前删除缓存。

通过首先删除缓存,防止用户读取旧数据。

这种方案的缺点是:如果数据库更新失败,用户仍然会读取旧数据,但不会出现不一致;如果请求是在数据库更新完成之前发出的,缓存仍然会加载到旧数据中,从而导致不一致。

三、延时双删方案

首先删除缓存,然后更新数据库。更新成功后,再次异步删除缓存。

这确保了在数据库成功更新后,缓存中的数据在一定时间后必须是更新的数据。

缺点:从成功的数据更新到成功的第二次缓存删除,用户可能会在短时间内读取旧数据。

总结

三种方案都不能称之为完美,使用时要根据需要选择。如果对数据一致性要求比较高,应该选择延迟和双重删除。如果不要求数据一致性且并发性不高,则选择双写一致性或绕过缓存。

当然,如果我们想要追求完美的数据一致性,就必须使用串行请求,但这将大大降低网络吞吐量。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/61500.html

(0)

相关推荐

  • 狗狗来大姨妈,母狗狗也会来“大姨妈”

    技术狗狗来大姨妈,母狗狗也会来“大姨妈”会滴,会滴,只要是母的狗,都会来红色朋友狗狗来大姨妈。嗯,红色朋友,就是大家指的大姨妈。母狗,在长到六七个月的时候就会来红色朋友。在狗狗的世界里,这叫做发情期啦!狗狗发情期一般是十

    生活 2021年10月29日
  • ADO.NET存储过程调用举例分析

    技术ADO.NET存储过程调用举例分析这篇文章主要讲解了“ADO.NET存储过程调用举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO.NET存储过程调用举例分

    攻略 2021年12月3日
  • session中的增删改方法是什么(session两种实现方式)

    技术如何进行session和v$session说明这期内容当中小编将会给大家带来有关如何进行session和v$session说明,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、前言

    攻略 2021年12月17日
  • 女生标准体重表,女体重与身高及尺寸的对照表

    技术女生标准体重表,女体重与身高及尺寸的对照表2-18岁女生身高体重对照表 年龄矮小偏矮正常偏高高个3rd10th50th90th97th身高(cm)体重(kg)身高(cm)体重(kg)身高(cm)体重(kg)身高(c

    生活 2021年10月28日
  • 如何进行JavaScript中getter/setter的实现

    技术如何进行JavaScript中getter/setter的实现如何进行JavaScript中getter/setter的实现,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望

    攻略 2021年10月29日
  • rnn网络训练方法(rnn在时间序列的表现)

    技术RNN如何训练并预测时序信号RNN如何训练并预测时序信号,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。上期我们一起用RNN做了一个简单的手写字分类器

    攻略 2021年12月21日