【Redis从头学-15】三个通俗例子带你理解Redis缓存击穿、缓存穿透、缓存雪崩并从思路引导三者的解决方案

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis从头学-15】三个通俗例子带你理解Redis缓存击穿、缓存穿透、缓存雪崩并从思路引导三者的解决方案

🌟前言


对于Redis缓存击穿、缓存穿透、缓存雪崩在求职面试中是常问题目。但是看这个字面意思太难理解上述三种现象,而且特别容易混淆。本篇文章就引导思路来让大家彻底理解三种现象以及解决方案。


🌟通俗理解


大家可以这样理解:Key比作一个点。


缓存击穿可以联想到体育运动中的击剑,击中一次代表某个Key失效;(一个点)

缓存雪崩可以联想到雪山中的雪崩景象,一个雪球代表某个key,多个雪球滚落代表多个key失效;(多个点)

缓存穿透可以联想到王者荣耀中的护甲受到真实伤害,假设其中的护甲代表着由密集Key做成的,受到真实伤害代表着你这件护甲根本不存在。(密集点)


🌟缓存击穿


现象:某个热点Key缓存失效,已经过期。

思路引导:


  1. 设置热点Key永不过期:从缓存过期的角度出发,我们想到了一个解决方案那就是设置热点key用不过期。那如果每个热点key都设置时间用不过期,而redis又是基于内存存储缓存,那就会造成性能的下降;此外,如果后端更新这个热点key的数据,而用户在请求的时就会获取到旧的数据。虽然有其缺点,但是也有它的适用场景,那就是适合静态数据即不经常变动的数据。
  2. 定时任务更新缓存:针对第一种解决方案的缺点,我们可以在程序中设置一个定时任务,根据热点Key的访问规律来定期更新缓存数据。
  3. 互斥锁:通过只有一个线程获取到锁来解决缓存击穿。当一个请求从缓存中查找key时,如果获取到null,则会获取锁。获取成功后会从数据库查询数据,并写入缓存。


🌟缓存穿透


现象:热点数据在缓存中根本就不存在。

思路引导:

1.接口层增加数据合理性校验:比如接口地址中传入一个id为-1的商品ID,那肯定数据不存在的。所以从此出发,可以通过对接口参数值增加数据校验,防止别人恶意传参。

2. 设置NULL值:由于是缓存根本不存在,我们可以设置一个空值,来避免缓存穿透的发生。但是,空值太多往往会造成性能的下降。

3. 设置短点的过期时间:过期时间过短是不是会增大缓存击穿的风险呢。

4. 布隆过滤器:通过此过快速检查缓存中是否存在热点KEY。


🌟缓存雪崩


现象:多个热点KEY失效。

思路引导:


  1. 离散过期时间:多个热点key集体失效,可能是设置了相对集中或者相同过期时间的key,可以将过期时间设置的相对分散一些。
  2. 设置Key用不过期并定时任务更新缓存:设置Key永不过期并在程序中设置一个定时任务,根据热点Key的访问规律来定期更新缓存数据。


🌟总结


现象 缓存击穿 缓存穿透 缓存雪崩
描述 某个热点Key缓存失效,已经过期。 热点数据在缓存中根本就不存在。 多个热点KEY失效。
解决方案 1.设置热点Key永不过期;
2.定时任务更新缓存;
3.互斥锁。
1.接口层增加数据合理性校验;
2.设置NULL值;
3.设置短点的过期时间;
4.布隆过滤器。
1.离散过期时间;
2.设置Key用不过期并定时任务更新缓存。


🌟写在最后


有关于从思路上理解Redis缓存击穿、缓存穿透、缓存雪崩及解决方案到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
109 85
|
1月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
1月前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
23天前
|
缓存 NoSQL 数据库
缓存穿透、缓存击穿和缓存雪崩及其解决方案
在现代应用中,缓存是提升性能的关键技术之一。然而,缓存系统也可能遇到一系列问题,如缓存穿透、缓存击穿和缓存雪崩。这些问题可能导致数据库压力过大,甚至系统崩溃。本文将探讨这些问题及其解决方案。
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
40 5
|
1月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
192 7
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
100 1
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
52 2
数据的存储--Redis缓存存储(二)
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
2月前
|
缓存 NoSQL 关系型数据库
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
223 0
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
下一篇
DataWorks