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

Java面试题:解决Redis缓存击穿问题

缓存击穿

当一个key过期时,需要对这个key进行数据重建

在重建的时间内如果有大量的并发请求进入,就会绕过缓存进入数据库,会瞬间击垮DB

重建时间可能因为数据是多个表的混合结果需要分头统计而延长,从而更容易出现缓存击穿问题

缓存击穿的解决方案

添加互斥锁

先查询缓存,如果未命中就尝试获取互斥锁,如果成功

查询数据库进行缓存数据重建

把新数据写入缓存中

最后释放锁

添加互斥锁可以保证
同时只存在一个线程对数据库进行缓存数据重建
如果在缓存数据重建中查询的线程会进入休眠等待数据重建

请添加图片描述

性能较低,但一致性好

逻辑过期

不设置过期时间使用逻辑过期

通过过期时间字段来定义数据的过期时间

过期时间在新增和更新时进行维护

当查询缓存时,发现数据已经过期

就会通过获取互斥锁的方式对数据进行重建

但重建数据使用新线程,在新线程完成数据重建后释放锁

原本查询缓存的线程会正常返回过期数据

其他查询的线程如果获取互斥锁失败(正在重建)也会正常返回过期数据

请添加图片描述

性能较高,但不能保证一致性

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

相关文章:

  • Redis的哨兵模式
  • Hadoop伪分布式安装教程
  • Day43 代码随想录打卡|二叉树篇---左叶子之和
  • 微信小程序动画
  • js, ellipsis属性, 超出宽度自动省略... , 并且显示2行
  • ucharts自定义添加tooltip悬浮框显示项内容且换行
  • Mongo 地理位置查询:海量密集点转换成聚合信息
  • bpmn+vue 中文文档
  • React Router v5 和 v6 中,路由对象声明方式有什么区别?
  • 【全开源】知识库文档系统(ThinkPHP+FastAdmin)
  • Python赋能自然语言处理,解锁通往AI的钥匙
  • Ktor库的高级用法:代理服务器与JSON处理
  • VS2017配置OpenCV4.5.1
  • phpstudy配置的站点不能访问了
  • Java Web学习笔记2——Web开发介绍
  • 从零开始实现自己的串口调试助手(3) - 显示底部收发,优化串口打开/关闭
  • 更改Web网站设计——css和css框架
  • 持续监控和优化的简单介绍
  • 针对硅基氮化镓高电子迁移率晶体管(GaN-HEMT)的准物理等效电路模型,包含基板中射频漏电流的温度依赖性
  • 基于websocket与node搭建简易聊天室
  • DevOps全面综述:从概念到实践
  • [C++]vector的模拟实现
  • 【云原生】Kubernetes----POD控制器
  • Java环境配置(超详细)
  • 【操作系统】(详细理解进程的状态)执行状态、就绪状态、阻塞状态、挂起状态
  • C++ -- string常用接口的底层实现
  • 怎么做好企业短信服务呢?(文字短信XML接口示例)
  • 鸿蒙小案例-音乐播放器
  • 语言模型测试系列【9】
  • 优思学院|质量工程师工资不高怎么办?