当前位置: 首页 > news >正文

Redis缓存和数据库一致性

先更新数据库然后删除缓存,如果删除缓存失败,会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致。一般解决方案有两个:

先删除缓存,然后更新数据库。即使数据库更新失败,数据库中还是旧数据,缓存是空的。读的时候缓存没有,就去读数据库中的旧数据,然后更新到缓存。

延时双删,先更新数据库,再删除缓存,5s之后再执行一次删除操作。

public void set(key, value) {
    putToDb(key, value);
    deleteFromRedis(key);

    // ... a few seconds later
    deleteFromRedis(key);
}

有一个请求过来对数据进行变更操作,先删除缓存,然后修改数据库,数据库数据没修改完之前又过来一个请求,去读缓存,发现缓存空了,然后查询数据库,查到了修改前的旧数据,放到了缓存中,然后第一个请求完成了对数据库的修改,此时就造成数据库和缓存中的数据不一样的情况。

分析:数据并发进行读写的时候才可能出现这种问题,如果并发量很低,特别是读并发,每天访问量就1万次,很少的情况下会出现这种不一致的场景。如果每天是上亿的流量,每秒并发读是几万,每秒只要有数据更新的请求,就可能会出现数据库+缓存不一致的情况。

解决方案:更新数据的时候根据数据的唯一标识,将缓存更新的请求发送到一个jvm内存队列中,然后同步等待缓存更新完成。一个数据变更的操作,先删除缓存,然后再去更新数据库,但是还没完成更新

相关文章:

  • wordpress 编写页面代码/企业文化内容范本
  • php动态网站开发可自学吗/合肥网站seo推广
  • 湖北网站推广策略/淘宝关键词排名查询工具
  • 做戒烟网站素材/公司搭建网站
  • 做网站报价/百度优化推广
  • 专业的河南网站建设公司/seo外包服务专家
  • JavaScript - 代理与反射(代理基础)
  • 消息批处理端口说明
  • Win10注册表损坏进不了系统怎么U盘重装系统?
  • python学习笔记---面向对象编程【廖雪峰】
  • QMAKE_POST_LINK QMAKE_PRE_LINK解释
  • 物流企业如何确保网络安全?
  • 【工具使用】Kvaser CANKing的使用
  • QEMU零知识学习5 —— QEMU安装
  • pom.xml文件详解
  • python学习笔记---高级特性【廖雪峰】
  • [激光原理与应用-65]:激光器-器件 - 多模光纤(宽频光纤)、单模光纤的原理与区别
  • TCP通信的三次握手和四次挥手详解