• 数据一致性:双删为什么要延时?


    为了保证redis和MySQL数据的一致性,我们知道要进行延时双删,具体原因分析参考Redis和MySQL保持数据一致性

    简单说一下延时双删的原理:

    先进行redis删除,然后写入数据库,等待一段时间后再进行redis删除

    原理自不必说,问题在于在写入数据库后为什么要延迟一段时间再删除redis而不能直接删除?

    在这里插入图片描述

    事务1进行数据库写入,当有其他事务2在A时间段内进行查询操作时,因为这时候数据库还没写入,这时候事务2读到的是旧数据。如果事务1在写入数据库后直接进行redis的删除,这时候事务2在事务1最后删除redis后更新了redis,那么这样就导致了数据不一致。以后每次读取时读到的都是脏数据直到redis过期。

    出问题的原因是什么,就是因为有事务2在A时间段内读取数据库时,在其他时间段内都不会发生不一致的问题。

    • 在事务1第一次删除redis前:这时候读取到的本身就是旧数据
    • 在事务1写入数据库后即B时间段,这时候读到的是新数据

    因此我们要保证所有在A时间段内读取数据库的事务在更新redis后,事务1能够将redis删除。

    只要设置延时时间为事务2的请求时间,这时候保证事务1在最后删除redis前,事务2已经更新了redis,保证了事务2的更新redis操作发生在事务1最后删除redis操作前。

    事务3即增加了延迟操作,保证最后redis删除时可以将所有的事务2的redis删除,这样就保证了最终的redis和MySQL数据的一致性

  • 相关阅读:
    移知丨一个芯片工程师的ADC学习笔记 (一)
    nodejs学习week01
    113. 路径总和ii
    如何把A3 pdf 文章打印成A4
    腾讯云弹性公网IP是什么?EIP是什么意思?
    IOS安全测试学习-DVIA-v2
    未来,属于终身学习者
    电容式触摸芯片-多键触摸检测高灵敏度、抗干扰强
    fplan-Powerplan实例
    mysql数据库优化--数据库参数
  • 原文地址:https://blog.csdn.net/z13653662052/article/details/126077585