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

Redis缓存击穿及解决问题

缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个
Key有大量的并发请求过来,这些请求发现缓存过期- -般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把DB压垮。


解决方案有两种方式:
第一可以使用互斥锁:当缓存失效时,不立即去load db,先使用如Redis的setnx去设置一个互斥锁, 当操作成功返回时再进行load db的操作并回设缓存,否则重试get缓存的方法


第二种方案可以设置当前key逻辑过期,大概是思路如下:
①:在设置key的时候,设置一个过期时间字段一 块存 入缓存中,不给当前key设置过期时间
②:当查询的时候,从redis取出数据后判断时间是否过期
③:如果过期则开通另外一个线程进行数据同步,当前线程正常返回数据,这个数据不是最新


当然两种方案各有利弊:
如果选择数据的强一致性,建议使用分布式锁的方案,性能上可能没那么高,锁需要等,也有可能
生死锁的问题
如果选择key的逻辑删除,则优先考虑的高可用性,性能比较高,但是数据同步这块做不到强一致。

http://www.lryc.cn/news/91798.html

相关文章:

  • 环境感知算法——2.CenterNet基于KITTI数据集训练
  • JUC 高并发编程基础篇
  • 【十二】设计模式~~~行为型模式~~~命令模式(Java)
  • 可再生能源的不确定性和储能系统的时间耦合的鲁棒性和非预期性区域微电网的运行可行性研究(Matlab代码实现)
  • Revit中如何使创建的族文件内存变小
  • ClassLoader源码
  • Kafka分区消息积压排查指南
  • 数据库 期末复习(4) 概念数据库的设计
  • WuThreat身份安全云-TVD每日漏洞情报-2023-05-26
  • 关于Idea的一些常用设置项
  • Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件
  • JavaScript语句(七)
  • 孪生诱捕网络在欺骗防御领域的应用
  • 【性能测试】Jenkins+Ant+Jmeter自动化框架的搭建思路
  • ARM体系结构与异常处理
  • 招聘网站—Hive数据分析
  • 双指针滑动窗口整理1——长度最小的子数组、水果成篮
  • textarea之换行、replace、\n、br、innerHTML
  • SKD240
  • 大数据采集怎么做呢?
  • 【学习日记】操作系统-入门知识-个人学习记录
  • ChatGPT自动生成思维导图
  • count(0)、count(1)和count(*)、count(列名) 的区别
  • python爬虫入门,10分钟就够了,这可能是我见过最简单的基础教学
  • 华为OD机试真题 Java 实现【记票统计】【牛客练习题】
  • .NET并行计算
  • Python:Python编程:金融量化交易
  • 「HTML和CSS入门指南」canvas 标签详解
  • 【JS】1699- 重学 JavaScript API - WebSockets API
  • String s = new String(“xyz“) 创建了几个对象?