• 如何保证缓存与数据库的双写一致性


    一、涉及到的操作

    缓存:读、写、更新、删除,这些操作可能失败

    数据库:读、写、更新、删除,这些操作可能失败

    二、正常流程

    1. 读数据,先读缓存,命中返回数据;未命中读数据库,返回数据,写缓存;读数据不存在不一致问题

    2. 写数据库,对缓存不做处理

    3. 更新数据库数据,如果数据不在缓存中,不作处理;如果数据在缓存中,删除而不是更新缓存

    a. 有些缓存中的数据,是经过处理后的数据,如果更新会消耗计算资源

    b. 如果频繁更新,却没有读取,就会浪费计算时间和内存空间

    4. 删除数据库数据,如果数据不在缓存中,不作处理;如果数据在缓存中,删除缓存

    三、初级的数据不一致问题

    更新数据库数据的时候,如果更新数据库数据成功,删除缓存数据失败,则数据不一致

    四、解决方法:更新数据库数据时,先删除缓存,可以保证一致性

    a. 如果删除缓存失败,则更新失败

    b. 如果删除缓存成功,但是更新数据库失败,则缓存中没有数据,数据库是旧数据

    五、复杂的数据不一致的问题

    在删除缓存后,更新数据库还未成功,此时有请求读取数据库旧数据,并把旧数据写入了缓存,然后更新数据库成功

    六、解决方法

    设置缓存过期时间,保证最终数据一致性

  • 相关阅读:
    冒泡排序&快速排序
    1252. Cells with Odd Values in a Matrix
    位运算小结
    832. Flipping an Image
    1812. Determine Color of a Chessboard Square
    10、属性、构造函数与析构函数
    09、封装与类成员
    07、面向对象简介
    06、C#异常处理
    03、运算符
  • 原文地址:https://www.cnblogs.com/june0816/p/6140626.html
Copyright © 2020-2023  润新知