Redis——缓存预热+缓存雪崩+缓存击穿+缓存穿透

devtools/2024/12/24 2:55:48/

文章目录

1、 缓存预热

什么是预热:
mysql加入新增100条记录,一般默认以mysql为准作为底单数据,如何同步给redis(布隆过滤器)这100条新数据。

为什么需要预热:
mysql有100条新纪录,redis

  1. 什么都不做,只对mysql做了数据新增,利用redis的会写机制,让它逐步实现100条新增记录的同步。最好是提前晚上部署发布版本的时候,由自己人提前做一次,让redis同步了,不要把这个问题留给客户。
  2. 通过中间件或者程序自行完成。

2、 缓存雪崩

发生缓存雪崩后的影响:

  1. redis主机挂了,redis全盘崩溃,偏硬件运维。
  2. redis中有大量key同时过期,大面积失效,偏软件开发。

预防+解决:

  1. redis中key设置为永不过期或者过期时间错开
  2. redis缓存集群实现高可用(主从 + 哨兵、Redis Cluster、开启Redis持久化机制aof/rdb,尽快回复缓存集群)
  3. 缓存结合预防雪崩(ehcache本地缓存 + redis缓存
  4. 服务降级 (Hystrix或者阿里sentinel限流或降级)
  5. 阿里云-云数据库Redis版

3、 缓存击穿

是什么:
大量的请求同时查询一个key时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去。简单说就是热点key突然失效了,暴打mysql。

危害:
会造成某一时刻数据库请求量过大,压力剧增。
一般技术部门需要知道热点key时哪些个?做到心里有数防止击穿。

解决:
缓存击穿——热点key失效——胡吃更新、随机退避、差异失效时间
热点key失效的原因:(1)时间到了自然清楚但还被访问到(2)delete掉的key,刚巧又被访问。
方案1:差异失效时间,对于访问频繁的热点key,干脆就不设置过期的时间。
方案2:互斥更新,采用双检加锁策略。

4、 缓存穿透

原理:
请求去查询一条记录,先查redis中没有,后查mysql中也没有,即都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增,这种现象称为缓存穿透,这个让redis变成了一个摆设。

解决方式:

  1. 空对象缓存:空对象缓存或缺省值。
    第一种解决方案: 回写增强
    如果发生了缓存穿透,可以针对要查询的数据,在Redis里存一个和业务部门商量后确定的缺省值(比如零、负数、defaultNull等)。比如键uid:abcxxx,值defaultNull作为案例的key和value。先去redis查键uid:abcdxxx没有,再去mysql查没有获得,这就发生了一次穿透现象。
    可以增强回写机制。
    mysql也查不到的话也让redis存入刚刚查不到的key并保护mysql。
    第一次查来查询uid:abcxxx,redis和mysql都没有,返回null给调用者,但是增强回写后第二次来查uid:abcxxx,此时redis就有值了。可以直接从Redis中读取default缺省值返回给业务应用程序,避免了把大量请求发送给mysql处理,打爆mysql。
    但是此种方法挡不住黑客的恶意攻击,有缺陷。只能解决key相同的问题。

  2. 布隆过滤器

总结

1. 缓存更新方式
产生原因:数据变更、缓存时效性
解决方案:同步更新、失效更新、异步更新、定时更新

2. 缓存不一致
产生原因:同步更新失败、异步更新
解决方案:增加重试、补偿任务最终一致

3. 缓存穿透:
产生原因:恶意攻击
解决方案:空对象缓存、布隆过滤器

4. 缓存击穿:
产生原因:热点key失效
解决方案:互斥更新、随机退避、差异失效时间

5. 缓存雪崩:
产生原因:缓存挂掉
解决方案:快速失败熔断、主从模式、集群模式


http://www.ppmy.cn/devtools/144875.html

相关文章

Kafka-创建topic源码

一、命令创建topic kafka-topics --create --topic quickstart-events --bootstrap-server cdh1:9092 --partitions 2 --replication-factor 2 二、kafka-topics脚本 exec $(dirname $0)/kafka-run-class.sh org.apache.kafka.tools.TopicCommand "$" 脚本中指定了…

基于微信小程序的短视频系统(SpringBoot)+文档

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

LeetCode hot100-92

https://leetcode.cn/problems/minimum-path-sum/description/?envTypestudy-plan-v2&envIdtop-100-liked 64. 最小路径和 已解答 中等 相关标签 相关企业 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的…

方正畅享全媒体新闻采编系统 screen.do SQL注入漏洞复现(附脚本)

0x01 产品描述: 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、…

基于WCF(C#)+SQL SERVER设计与实现的在线评测系统

基于WCF和SQL SERVER的在线评测系统设计与实现 摘要 目前,在线评测系统大多采用Linux系统作为运行平台,由于Linux系统人机交互能力差,使得系统部署要求高和维护难度大。本文针对以上问题进行分析,采用Windows操作系统作为运行平…

人脸修复与增强腾讯开源项目GFPGAN介绍

GFPGAN 简述 GFPGAN (Generative Facial Prior GAN) 是一种基于生成对抗网络(GAN)的面部图像修复与增强模型。它由腾讯 ARC Lab 的研究团队开发,目的是以高效和高质量的方式修复低分辨率、受损或老化的人脸图像,同时保留其真实感和…

【echarts】创建带有标记线和点击事件的折线图

echars在线例子 option {xAxis: {type: category,data: [20240101, 20240102, 20240103, 20240104, 20240105, 20240106, 20240107], // 日期数据},yAxis: {type: value, // 数值类型Y轴},series: [{data: [150, 230, 224, 218, 135, 147, 260], // 数据值type: line, // 折线…

【CSS in Depth 2 精译_085】14.2:CSS 蒙版的用法

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 14.1.1 滤镜的类型14.1.2 背景滤镜 14.2 蒙版 ✔️ 14.2.1 带渐变效果的蒙版特效 ✔️14.2.2 基于亮度来定义蒙版 ✔️14…