redis缓存延时双删指的是什么

缓存为啥是删除,而不是更新?

如果是更新,存在分布式事务问题,可能出现修改了缓存,数据库修改失败的情况。只是删除缓存的话,就算数据库修改失败,下次查询会直接取数据库的数据,也不会出现脏数据。

延时双删什么

就是在增删改某实体类的时候,要对该实体类的缓存进行清空,清空的位置在数据库操作方法的前后。

采用反证法

只先删

redis缓存延时双删指的是什么

只后删

redis缓存延时双删指的是什么

结论

从而得出 前删和后删都有问题。所以采用延时双删的策略

思考2:为啥是延时

依然是反证法。下图这情况是双删依然存在旧缓存的情况,延时是确保 修改数据库-》清空缓存前,其他事务的更改缓存操作已经执行完。

redis缓存延时双删指的是什么

补充:为什么要延迟双删,来保证缓存一致性

为什么要延迟双删,来保证缓存一致性

  • 在修改数据库数据前,需要先删除一次redis:此时是为了保证在数据库数据修改和redis数据被删除的间隔时间内,如有命中,保证此数据也不存在redis中。如果没有这一次删除,当数据库数据已经被修改了,但是还是可以从redis中读出旧数据,导致数据不一致。

  • 第二次删除则是在修改数据库数据后,此时需要再次删除redis中对应数据一次,这一次是为了删除 名列前茅次redis删除和数据库数据修改之间,如果有请求,那么旧数据又会重新缓存到redis中,然而数据在数据库中在接下来就会被修改,如果没有这一次删除,redis中则会存在数据库中旧的数据。

  • 那么第二次为什么需要在数据库修改后延迟一定时间再删除redis呢?

  • 为了等待之前的一次读取数据库,并等待其数据写入到缓存,最后删除这次脏数据,所以是一次数据从数据库中发到服务器+缓存写入的时间

redis缓存延时双删指的是什么

但是延迟双删,所延迟的时间非常的难以确定,所以并不推荐延迟双删

根据综合考虑,即使先修改数据库,在删除缓存,有一定的时间会导致读取到旧数据,这通常是可以被忍受的。
只要及时将缓存删除,其他线程就可以读取到最新的值。

同时为了保证缓存一定会被删除,可以采用mq,来保证缓存会被删除

如果在mq中消息没有被重复消费,还会交由给其他消费者消费(将缓存删除)

读到这里,这篇“redis缓存延时双删指的是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

文章标题:redis缓存延时双删指的是什么,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/21668

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年8月30日 下午11:27
下一篇 2022年8月30日 下午11:28

相关推荐

  • windows U盘启动bios如何设置

    U盘启动bios设置方法: 1、将制作好的u盘启动盘插入电脑usb接口后,重启电脑按f2进入到bios界面, 然后切换至boot选项卡,选中External Device Boot并按回车,将其改为Enabled。 2、然后依然在boot选项卡中,按方向键“↑、↓”选择External Device…

    2022年9月22日
    1.2K00
  • 如何简单绕过人机身份验证Captcha

    今天分享的Writeup是作者在目标网站漏洞测试中发现的一种简单的人机身份验证(Captcha)绕过方法,利用Chrome开发者工具对目标网站登录页面进行了简单的元素编辑就实现了Captcha绕过。 人机身份验证(Captcha)通常会出现在网站的注册、登录和密码重置页面,以下是目标网站在登录页面中…

    2022年9月15日
    3.4K00
  • MySQL如何优化性能

    – MySQL服务器配置:\ 好吧,首先你应该知道配置文件的位置,具体取决于你的操作系统。在 Linux 系统中,它位于“/etc/mysql/my.cnf”中。\现在是时候选择你的引擎 InnoDB 和 MyISAM 了。为了让选择更容易,你应该知道 InnoDB 成为 MySQL 5…

    2022年9月22日
    45700
  • mysql的配置文件是哪个

    Windows操作系统中的MySQL配置文件是“my.ini”,位置一般在MySql安装的根目录下,也有可能在隐藏文件夹“ProgramData”下面;而Linux操作系统中的MySQL配置文件是“my.cnf”,位置一般在“/etc/my.cnf”或“/etc/mysql/my.cnf”目录下。 …

    2022年9月20日
    3.4K00
  • 如何用rank函数排名不重复

    用rank函数排名不重复的方法: 1、首先打开表格,进入你的表格。 2、然后在单元格中输入公式:=RANK(H2,H2:H47,0)可以看到名列前茅行43的排行。 3、然后将书本放在单元格右下角,然后向下拉。 4、最后就可以看到很多的重复排名了,但是没有第二和第三。 5、如果需要不重复就需要在ran…

    2022年8月30日
    4.0K00
  • MySQL的rollback实例分析

    本文主要介绍“MySQL的rollback实例分析”的相关知识,文中所提到的一些操作方法不仅实用性强,且操作简单、快捷,不仅能帮助大家取得一定工作成果,而且还能提升工作效率,如果感兴趣的话,请耐心阅读! 事务回滚 事务是关系型数据库里的执行单位,可以通过最后阶段控制选择提交或回滚。在各种无法保证完整…

    2022年6月27日
    63800
  • word字体放大少了一截怎么解决

    解决方法 1、 首先把文字选中(全选的快捷键是ctrl A)。 2、在选中的文字上面右击鼠标,选择“段落”。 3、找到间距一栏,里面有行距和设置值.我们可以看到设置成了固定值。 4、点击行距旁边的下拉框按钮,然后选择单倍行距,或者1.5倍行距等等.这里以单倍行距为例。 5、选择好之后如图,点击确定。…

    2022年9月18日
    64900
  • php进程通信之信号量的用途是什么

    常见进程通信方式 一些理论基础 临界资源:每次仅允许一个进程访问的资源。 临界区:每个进程中访问临界资源的那段代码叫临界区 所谓临界区(也称为临界段)就是访问和操作共享数据的代码段。 进程互斥:两个或以上的进程不能同时进入关于同一组共享变量的临界区域,即一个进程正在访问临界资源,另一个进程要想访问必…

    2022年9月2日
    52800
  • Mysql中的Enum数据类型实例分析

    Mysql中的enum类型就是我们常说的枚举类型,它的取值范围需要在创建表时通过枚举方式(一个个的列出来)显式指定。对1至255个成员的枚举需要1个字节存储;对于255至65535个成员,需要2个字节存储。非常多允许有65535个成员。 enum底层存的是十进制整数,严格按顺序1,2,3,4,5…排…

    2022年9月13日
    87500
  • jquery中可不可以添加静态方法

    jquery中可以添加静态方法。添加静态方法的方法:1、利用“function AClass(){…}”定义一个类;2、利用“AClass.staticMethod = function(){…}”给类添加一个静态方法;3、利用“AClass.staticMethod();”…

    2022年9月15日
    41600
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部