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

redis 雪崩,穿透,击穿及解决方案

一、缓存雪崩:

  1. 原因:

  缓存雪崩是指在我们设置缓存时大量采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。

  2. 解决方案:

  1. 将失效时间分散,通过生成随机数使得key的过期时间为随机,防止集体过期。
  2. 使用多级架构,nginx缓存+redis缓存+其他缓存,不同层使用不同缓存,可靠性更强。
  3. 设置缓存标记,如果过期通知其他线程在后台更新实际的key。 这种方法对于性能非常友好,唯一不足的就是构建缓存时候,其余线程(非构建缓存的线程)可能访问的是老数据
  4. 使用锁或者队列的方式
  5. 使用排他锁,其他请求只能等待。

二、缓存穿透:

  1.原因:

缓存穿透是指大量数据查询一个不存在的数据,在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

  2. 解决方案:

  1. 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
  2. 如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

三、缓存击穿:

    1.原因:

热点key过期,大量数据访问过期key

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

    2. 解决方案:

  1.   提前对热点数据进行设置。对于新闻,某博等热点数据预先设置在redis中
  2.   监控数据,对热点数据实时调整key过期时长。
  3.   使用锁,加锁或者队列的方式保证缓存的单线 程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上。

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

相关文章:

  • Flutter环境搭建及新建项目
  • 【面试题精讲】深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
  • CentOS7.9中使用packstack安装train版本
  • mfw git泄露构造闭合
  • UE5修改导航网格的参数
  • 郁金香2021年游戏辅助技术中级班(七)
  • 【网络】路由器和交换机的区别
  • SQL的CASE WHEN函数、CAST函数、CONVERT() 函数、COALESCE()函数、DATEDIFF()函数
  • 前后端分离计算机毕设项目之基于springboot+vue的房屋租赁系统《内含源码+文档+部署教程》
  • 《Spring框架前世今生》
  • 基于树种优化的BP神经网络(分类应用) - 附代码
  • 纳百川冲刺创业板上市:计划募资约8亿元,宁德时代为主要合作方
  • light client轻节点简介
  • 1500*B. Zero Array(贪心数学找规律)
  • java Spring Boot整合jwt实现token生成并验证效果
  • 基础-MVP图像处理-仿射变换
  • Linux嵌入式学习之Ubuntu入门(六)shell脚本详解
  • 学习完C++ 并发编程后 手写线程池 最简单的线程池
  • 【Overload游戏引擎分析】编辑器对象鼠标拾取原理
  • 【Spring内容进阶 | 第三篇】AOP进阶内容
  • 华为云ModelArts:引领AI艺术创作的未来,让人人都可以成为“艺术家”!
  • Elasticsearch:如何从 Elasticsearch 集群中删除数据节点
  • 长假回归,回顾一下所有的电商API接口
  • 认识计算机主板
  • PHP乱七八糟面试题
  • pom管理规范
  • AI大模型的安全隐患问题与新兴Anthropic新势力涌动
  • slamplay:用C++实现的SLAM工具集
  • IPT2602协议-USB 快速充电端口控制器
  • Zotero 超好用插件的下载链接及配置方法(PDF-translate/ZotFile/茉莉花/Zotero Scihub)