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

Redis 缓存击穿、穿透、雪崩

1. 缓存击穿

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

解决策略

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

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

2. 缓存穿透

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

解决策略

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

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

3. 缓存雪崩

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

解决策略

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

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

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

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

相关文章:

  • 使用开源RustDesk部署远程控制服务
  • Coco-LIC基于ubuntu的vscode进行断点调试
  • 【Web】从TFCCTF-FUNNY浅析PHPCGI命令行注入漏洞利用
  • 对比一下在 OpenCV 和 AE 中如何实现常用效果 [精]
  • docker安装及使用
  • HTML前端面试基础(一)
  • [Git][多人协作][下]详细讲解
  • MySQL笔记(七):索引
  • JS 原型和原型链
  • 【无标题】图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换
  • 自动化专业英语
  • 如何使用 Python 进行数据可视化,比如绘制折线图?
  • PostgreSQL数据库的事务ID和事务机制
  • LeetCode 热题 HOT 100 (020/100)【宇宙最简单版】[创作中]
  • XML动态sql查询当前时间之前的信息报错
  • EMQX服务器安装MQTT测试
  • 3. 无重复字符的最长子串(滑动窗口)
  • 用javaagent和javassist实现Arthas的watch功能
  • golang 图片转1bit color bmp图片
  • Leetcode75-5 反转字符串的元音字母
  • static关键字在Java中的作用与用法
  • 50etf期权行权采用什么交割方式 ?
  • ts-node 报错 ERR_UNKNOWN_FILE_EXTENSION
  • 水域救援设备,保护水域安全_鼎跃安全
  • openmetadata本地编译环境搭建
  • LeetCode Hard|【25. K 个一组翻转链表】
  • python爬虫预备知识三-多进程
  • 【zlm】针对单个设备的音频的编码的设置
  • 文案人的梦工场,网易入职指南!
  • 做一个能和你互动玩耍的智能机器人之七-接入对话和大模型