zoukankan      html  css  js  c++  java
  • Redis数据一致性

    概述

    • 当前修改或者保存,删除数据库数据之后,Redis中的数据也应该进行相应的变化。不然再次查询可能查询出已经删除的脏数据
    • 无论是先写到缓存还是先写到数据库,这两部操作不能保证原子性,所以会出现数据不一致性问题
    • 先删除缓存,在修改数据库,如果修改失败了,数据库中依旧是旧数据,缓存中是空的,读的时候缓存中没有,数据库中有,更新到缓存中。数据发生了变更,先删除缓存,然后要去修改数据库,此时,另一个线程请求进来,去读缓存,发现缓存空了,去查数据库,发现了旧数据,更新到缓存中,随后数据库变更操作完成了更新,这样数据库和缓存就不一致了

    如何解决

    • 延时双删:先淘汰缓存,在写数据库,休眠一秒再次淘汰缓存
    1. 线程A删除缓存
    2. 线程B查询缓存发现为空
    3. 线程B查询DB并写入缓存
    4. 线程A更新数据库
    5. 延时一秒线程A在删除缓存
    • 串行化
  • 相关阅读:
    偶感
    数据库脚本开发中应注意的事项
    事务与隔离级别笔记
    Spring MVC学习笔记
    Eclipse环境配置与快捷命令
    告别2016,展望2017
    待总结项
    常见问题汇总
    我的工具箱
    精品文章收藏
  • 原文地址:https://www.cnblogs.com/jsersudo/p/13129455.html
Copyright © 2011-2022 走看看