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

    概述

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

    如何解决

    • 延时双删:先淘汰缓存,在写数据库,休眠一秒再次淘汰缓存
    1. 线程A删除缓存
    2. 线程B查询缓存发现为空
    3. 线程B查询DB并写入缓存
    4. 线程A更新数据库
    5. 延时一秒线程A在删除缓存
    • 串行化
  • 相关阅读:
    bzoj 1051: [HAOI2006]受欢迎的牛
    bzoj 1192: [HNOI2006]鬼谷子的钱袋
    一些动规水题
    USACO 2014 Open Silver Fairphoto
    USACO 2013 Nov Silver Pogo-Cow
    09day1
    09day2
    08day2
    08day1
    07day2
  • 原文地址:https://www.cnblogs.com/jsersudo/p/13129455.html
Copyright © 2011-2022 走看看