Redis的缓存雪崩、缓存穿透、缓存击穿

2023-09-13 10:05:21

1. redis的优点

  1. 高性能:redis是基于内存的数据库,数据存储在RAM中,读写速度很快

  2. 数据持久化:能够将内存中的数据保存咋磁盘上,防止数据丢失;两种持久化方式:快照和日志追加形式

  3. 简单丰富:支持丰富的数据类型和易于使用的API

2. redis的缺点

  1. 内存限制:redis存储在内存中,因此受可用内存大小的限制

  2. 单线程模型:redis采用单线程来处理客户端请求,高并发场景下性能受到限制

3. 缓存雪崩

概念:同一时刻内,缓存大批量的失效,导致所有的请求直接到数据库中查询,导致数据库崩溃;

        比如秒杀场景下,若缓存全部失效,导致所有请求到达数据库中

解决方法:批量向redis中存数据时,将每个key的失效时间加上随机数,保证数据不会再同一个时间内大面积失效

4. 缓存穿透

概念:查询一个数据库一定不存在的数据;数据查询时:先从缓存中查询,若缓存中没有数据,则去数据库中查询数据,若数据库中有数据则存入缓存,如果数据库中没有数据则不会放进缓存;

        比如可能存在有人一直查询一个数据库中不存在数据的情况,从而导致数据库压力过大

解决方法:设置:在缓存中查询不到并且数据库中不存在的情况,将对应keyvalue设置为null,直接返回即可;为每一个用户设置接口限流,无法大批量发送恶意攻击

5. 缓存击穿

概念:缓存击穿是假如一个热点key不停的被大量访问,当key过期瞬间,持续的并发就会击穿缓存,请求全部到达数据库中,引发雪崩的问题

解决方法:设置互斥锁:如果缓存key失效,即取到的值value为空的情况下,将请求访问设置为互斥关系,当线程访问数据库时,另一个线程必须等待,当访问数据库的线程访问结束并写入缓存后,另一个线程才允许去访问;

互斥锁:当有一个请求到达,若在缓存中命中,则直接返回;

                  若未命中,则尝试获取互斥锁,若未获取,则sleep一段时间重新查询缓存;

                       若获取互斥锁则根据请求查询数据库值,将值写入redis中,然后释放互斥锁,并返回数据

更多推荐

写一篇nginx配置指南

nginx.conf配置找到Nginx的安装目录下的nginx.conf文件,该文件负责Nginx的基础功能配置。配置文件概述Nginx的主配置文件(conf/nginx.conf)按以下结构组织:配置块功能描述全局块与Nginx运行相关的全局设置events块与网络连接有关的设置http块代理、缓存、日志、虚拟主机等

Golang 字符串

目录1.Golang字符串1.1.基础概念1.2.字符串编码1.3.遍历字符串1.4.类型转换1.5.总结1.6.StringConcatenation(字符串连接)1.6.1.Usingthe`+`operator1.6.2.Usingthe`+=`operator1.6.3.UsingtheJoinmethod1.

民安智库(第三方市场调查公司)开展景区游客满意度调查

为什么要开展景区游客满意度调查景区的经营管理是一个动态的过程,需要不定期的地进行调查,让管理者了解景区管理的不足之处,并不断地改善和提高管理水平,以保证经营目标的顺利完成。景区旅游要想真正地成为可持续发展的经济产业,就不能忽视游客的体验感受情况,这是因为旅游景区游客满意度的变化能直接反映出景区管理中存在的问题。现在国内

Twitter图片数据优化的细节

Twitter个人数据优化:吸引更多关注和互动头像照片在Twitter上,头像照片是最快识别一个账号的方法之一。因此,请务必使用公司的标志或与品牌相关的图片。建议尺寸为400x400像素。为了建立强大的品牌形象和一致性,强烈建议在所有社交媒体上使用相同的头像照片。您的Twitter简介是针对企业的160个字符的描述。它

数据分析与可视化项目技术参考

🙌秋名山码民的主页😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪🎉欢迎关注🔎点赞👍收藏⭐️留言📝获取源码,添加WX目录1.考核的主要内容2.具体实现流程3.技术参考3.1数据获取3.2数据清洗与处理3.3数据存储到Mysql3.4网站开发3.4.1登录页面3.4.2数据可视化

数据库数据恢复-SQL SERVER数据库分区被格式化的数据恢复方案

SQLSERVER数据库故障类型:1、SQLSERVER数据库文件被删除。2、SQLSERVER数据库所在分区格式化。3、SQLSERVER数据库文件大小变为“0”。4、使用备份还原数据库时覆盖原数据库。SQLSERVER数据库故障原因:1、人为误操作。2、文件系统损坏,设备自动做磁盘检测。SQLSERVER数据库故障

【Spring Boot】Spring Boot源码解读与原理剖析

这里写目录标题前言精进SpringBoot首选读物“小册”变“大书”,彻底弄懂SpringBoot全方位配套资源,学不会来找我!技术新赛道,2023领先抢跑前言承载着作者的厚望,掘金爆火小册同名读物《SpringBoot源码解读与原理剖析》正式出书!本书前身是掘金社区销量TOP的小册——《SpringBoot源码解读与

shell循环和函数

目录1.for循环2.while循环3.until循环4.函数5.特殊流程控制语句1.for循环for循环是固定循环,也就是在循环时就已经知道需要进行几次的循环,有事也把for循环成为计数循环。for的语法如下两种:语法一for变量in值1值2值3…(可以是一个文件等)do程序done这种语法中for循环的次数,取决于

ARTS 打卡 第二周,按部就班

引言认识三掌柜的想必都知道,我持续创作技术博客已经有6年时间了,固定每个月发布不少于6篇博文。同时,自己作为一名热爱分享的开发者,像ARTS这样的活动自然少不了我。由于我是打算挤在一起分享,之前都是做了本地文档记录,所以直接把内容整合起来即可,那么接下来就开启我的第二周打卡咯。Algorithm本周分享的算法题是力扣(

400电话怎么办理(申请开通)

申请开通400电话是一项相对简单的过程,只需按照以下步骤进行操作即可。第一步,选择400电话服务提供商。在市场上有很多公司提供400电话服务,您可以根据自己的需求和预算选择适合的服务商。可以通过搜索引擎、咨询朋友或者查看相关论坛等方式获取一些可靠的服务商名单。第二步,了解服务商的费用和服务内容。不同的服务商提供的费用和

消息中间件大揭秘:选择之前你必须知道的关键信息

Hello大家好!我是小米,很高兴再次和大家见面!今天的话题非常精彩,我们将深入探讨消息中间件,并了解一些常见的消息队列:RabbitMQ、RocketMQ、Kafka以及Redis。如果你正在准备面试,或者只是对这些消息中间件感兴趣,那么这篇文章一定会对你有所帮助。什么是消息中间件?首先,让我们来了解一下什么是消息中

热文推荐