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

Redis 缓存击穿、穿透、雪崩

1. 缓存击穿

问题描述: 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又都去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。

解决策略

  • 设置热点数据永不过期:对于经常被访问的热点数据,可以将其缓存时间设置为永不过期。

  • 加互斥锁:在访问缓存之前,先使用分布式锁或其他并发控制手段,确保只有一个线程或进程去数据库查询,并将结果更新到缓存中,其他线程或进程则等待缓存更新后访问。

2. 缓存穿透

问题描述: 缓存穿透是指用户查询数据,在数据库没有,缓存中自然也不会有。但用户仍然不断发起请求,以不存在的数据去访问缓存,导致缓存被多次访问数据库,压力骤增。

解决策略

  • 布隆过滤器(Bloom Filter):对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力。

  • 缓存空结果:当查询数据库为空时,也将这个空结果进行缓存,并设置较短的过期时间。这样当再次查询该数据时,可以直接返回缓存中的空结果,避免了对数据库的查询。

3. 缓存雪崩

问题描述: 缓存雪崩是指在某一个时间段,缓存集中过期失效。在这个时间段内,对缓存中的所有key的访问都会落在DB上,造成DB访问量骤增,引起DB压力瞬间增大,甚至导致DB宕机。

解决策略

  • 设置过期时间时加上一个随机值:这样可以避免大量缓存同时失效。

  • 双缓存策略:准备两个缓存,A和B。A的过期时间比B短。A缓存失效后,请求会走到B缓存。B缓存再作为兜底数据来请求数据库。

  • 后台更新缓存:对于即将过期的缓存,通过后台任务来提前刷新缓存,避免缓存过期时间过于集中。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 8月6日Spring Boot学习笔记
  • 三体系认证:企业发展的战略必选项
  • 【自动驾驶】ubuntu server安装桌面版
  • Selenium + Python 自动化测试06(frame操作方法)
  • 【vulnhub】Wakanda :1靶机
  • 《向量数据库指南》——开源社区与商业化的平衡
  • 茶余饭后(六)
  • [AI Embedchain] 开始使用 - 全栈
  • Vue 2 TodoList 案例
  • 博弈dp,CF 731E - Funny Game
  • Linux安全与高级应用(三)深入探索MySQL数据库:安装、管理与安全实践
  • 在MySQL中,处理层次结构数据(如树状或组织结构图)的查询
  • 国家网络安全战略
  • 新160个crackme - 027-MexeliteCRK1
  • 深度学习:记一次由model.train() 引发的模型训练效果变差事故
  • 【译】理解JavaScript:new 关键字
  • js写一个简单的选项卡
  • Lucene解析 - 基本概念
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SegmentFault 2015 Top Rank
  • vagrant 添加本地 box 安装 laravel homestead
  • vue 配置sass、scss全局变量
  • Vue2.x学习三:事件处理生命周期钩子
  • vue-router 实现分析
  • web标准化(下)
  • 关于Flux,Vuex,Redux的思考
  • 蓝海存储开关机注意事项总结
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 听说你叫Java(二)–Servlet请求
  • 我有几个粽子,和一个故事
  • 线上 python http server profile 实践
  • 原生JS动态加载JS、CSS文件及代码脚本
  • MyCAT水平分库
  • Nginx实现动静分离
  • 我们雇佣了一只大猴子...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # wps必须要登录激活才能使用吗?
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (安卓)跳转应用市场APP详情页的方式
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (转) 深度模型优化性能 调参
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .chm格式文件如何阅读
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Framework .NET Core与 .NET 的区别
  • .net打印*三角形
  • .NET开源、简单、实用的数据库文档生成工具
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • //TODO 注释的作用