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

redis双写一致问题场景及方案

产生问题的场景

写入数据库后立即更新缓存(较常见)

在这里插入图片描述
这种场景下 问题产生的主要原因是写入数据库与更新缓存非原子性 有延迟 所以这样会导致谁更新缓存慢 谁会真正的更新缓存

更新数据库后立即删除缓存 查询时再插入缓存

在这里插入图片描述
与上一场景类似 虽然写入数据库后删除了缓存 但由于查数据库和更新缓存之间存在延时 所以还是不能真正的更新缓存

解决方案

最简单的方案

对可能出现上述情况的缓存加过期时间,在低概率的情况下 虽没有完全解决这个问题 但是大概率只是短时间某几个key存在上述问题 看系统的容忍度

加读写锁

对于读读 情况不需要枷锁 但对于并发读写/写读 /写写要加锁

引入canal

canal既监听mysql的binlog 一般都会用kafka解耦 同时保证了顺序性
缺点:增加了系统的复杂度

延时双删

在这里插入图片描述
写缓存后立即删除缓存后等待一段时间后再次删除缓存 目的是防止其他线程更新缓存 如上图中的线程3 这种情况
缺点:1.不能完全解决 因为线程3更新缓存的时间可能还是会晚于第二次删除缓存的时间 只能说更大程度的避免了这一问题发生的可能性
2.等待时间不好掌握


http://www.kler.cn/a/13521.html

相关文章:

  • 计算机视觉面试
  • Java核心技术 卷1-总结-15
  • 程序员随时担心被抛弃......大厂外包值不值得去?
  • 掌握C++中介者模式:设计与应用全攻略
  • 基于Java+SpringBoot+Vue+uniapp微信小程序零食商城系统设计和实现
  • 零门槛,手把手教你玩转ChatGPT,顺滑般国内使用chatGPT
  • 代码随想录算法训练营第50天|123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV
  • 【设计模式】深入浅出--外观模式
  • Unity日记22(携程概念)
  • 2023 腾讯暑期实习申请经验分享
  • 技术干货|直流电源自动测试系统功能介绍
  • Docker网络详解
  • FreeRTOS学习笔记(一)——初识FreeRTOS
  • 分享下这些软件外包公司(2023最新版),程序员有福了
  • 程序员跳槽,要求涨薪50%过分吗?
  • 【存储技术分享】SGL和SGE
  • ERTEC200P-2 PROFINET设备完全开发手册(9-2)
  • 性能测试:深入理解线程数,并发量,TPS,看这一篇就够了
  • [java/初学者]java常用API(2)——字符串
  • leetcode551. 学生出勤记录 I