Redis的缓存问题

        说起Redis的缓存,我们知道前端发出的请求到后端,后端先从Redis中查询,如果查询到了则直接返回,如果Redis中未查询到,就去数据库中查询,如果数据库中存在,则返回结果并且更新到Redis缓存当中,如果数据库中都没有,则返回空结果。流程如下:

 

1.缓存穿透

        假设有一条数据,数据库根本就不存在,比如查询id为-1的数据,如果前端查询id为-1的请求发过来,Redis中没有,又会去数据库中查询,这样的话,如果有人恶意攻击(比如利用测试软件瞬间大量的发出此种请求),数据库就有可能会崩掉,这就是缓存穿透。

解决办法:

  • 对参数进行校验,不合法参数直接拦截。

  • 既然在数据库中查不到,对此种请求我们设置一个空对象放到Redsi中,设置一个较短的过期时间。

2.缓存击穿

        假设此时某一个热点key即将过期了,在刚好过期的这个时间结点,若有大量的访问此热点数据的请求并发发送过来(比如淘宝单点秒杀),Redis中查询不到,又会一瞬间的同时访问数据库,也可能瞬间会将数据库搞崩。

解决办法:

  • 对热点key设置为永不过期(对内存不友好)。

  • 加互斥锁,第一个请求到来先占用此锁,此时其他请求过来拿不到,等第一个请求从数据库查询的结果返回并且存放到Redis中,其余的请求再来访问(即会从Redis中快速拿到数据)。

3.缓存雪崩

        假设此时正在处于淘宝秒杀的时间段,在高并发的情况下,如果此时大量的缓存失效,或者缓存层出现故障,所有的请求也同时访问数据库,也可能会造成数据库崩掉的状况。

解决办法:

  • 随机设置过期时间。

  • 不设置过期时间。

  • 若是集群部署,将热点数据分散到多台Redis服务器当中。

4.缓存总结

        穿透是redis里不存在这个缓存key;击穿是redis某一个热点 key 突然失效,雪崩是大面积的key缓存失效;最终的受害者都是数据库。

5.对于Redis 宕机这种情况我们应该怎么解决:

  • 事发前:实现 Redis 的高可用(主从架构+哨兵),尽量避免 Redis 挂掉这种情况发生。

  • 事发中:万一Redis 真的挂了,我们可以设置本地缓存(ehcache)+限流,尽量避免我们的数据库崩掉(虽然访问慢一些,但起码能保证我们的服务还是能正常工作的) 。

  • 事发后:redis 持久化,重启后自动从磁盘上加载数据,快速恢复缓存数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21890.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis_简介(1)

目录 Redis简介 Redis特性 Redis 优势 Redis应用场景 源码等资料获取方法 Redis简介 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由…

leetcode 450. 删除二叉搜索树中的节点

2023.7.14 搜索二叉树相关的题一般都能用递归解决。 本体大致思路是:使用递归的方式,在树中查找目标节点,并根据节点的情况进行删除操作。如果目标节点是叶子节点,直接删除它;如果目标节点只有一个子树,将子…

mysql笔记

目录 1、root用户密码忘记 2、SQL的分类 2.1、DQL数据查询语言 前言 2.1.1、设置别名 2.1.2、去除重复行 2.1.3、空值参与运算 2.1.4、着重号 2.1.5、显示表结构 2.1.6、算数运算符 2.1.7、比较运算符 2.1.8、逻辑运算符 2.1.9、位运算符 2.1.10、 模糊查询 2.1.…

经典CNN(一):ResNet-50算法实战与解析

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 1 ResNet理论 深度残差网络ResNet(deep residual network)在2015年由何凯明等提出,因为它简单与实用并存,随后很多研究…

cloud Alibab+nacos+gateway集成swaggerui,统一文档管理(注意点)

首先说明&#xff1a;本文只说整合注意点 效果图和功能参考链接 1.使用gateway访问nacos服务&#xff0c;503 在网关服务添加依赖即可解决 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign&…

Halcon与OpenCV:哪个更适合你的机器视觉应用?

Halcon和OpenCV是两个广泛使用的机器视觉库&#xff0c;各有优势和适用场景。下面是对它们的简要比较&#xff1a; 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 Halcon&#xff1a; Halcon是由MVTec Software GmbH开发的商业机器视觉库。它提供了广泛…

NLP Transformer的Decoder的输入输出都是什么?能解释一下每个部分都是什么?

要弄清楚Decoder的输入输出&#xff0c;关键在于图示三个箭头的位置&#xff1a; 以翻译为例&#xff1a; 输入&#xff1a;我爱中国输出&#xff1a; I Love China 因为输入&#xff08;“我爱中国”&#xff09;在Encoder中进行了编码&#xff0c;这里我们具体讨论Decoder的…

使用WiFi测量仪进行机器人定位的粒子过滤器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

pytorch2.0版本简介

PyTorch 2.0 中发布了大量足以改变 PyTorch 使用方式的新功能&#xff0c;它提供了相同的 eager mode 和用户体验&#xff0c;同时通过 torch.compile 增加了一个编译模式&#xff0c;在训练和推理过程中可以对模型进行加速&#xff0c;从而提供更佳的性能和对 Dynamic Shapes …

docker数据卷权限管理--理论和验证

一、Docker容器中用户权限管理 Linux系统的权限管理是由uid和gid负责&#xff0c;Linux系统会检查创建进程的uid和gid&#xff0c;以确定它是否有足够的权限修改文件&#xff0c;而非是通过用户名和用户组来确认。 同样&#xff0c;在docker容器中主机上运行的所有容器共享同一…

[oeasy]python0072_整数类型_int_integer_整型变量

帮助手册 回忆上次内容 上次了解的是 字符串字符串 就是 字符的串 字符串长度 可以用 len函数字符可以用下标索引 [] 可以用str 将整型数字 转化为 字符串 字符的长度本身 有长有短 ascii字符集 包括各种 转义字符 都对应 1 个字节 unicode 字符中的汉字 可能对应 3 个字节 但…

物业管理微信小程序的设计与开发

1.物业管理微信小程序实现的功能 该微信小程序包含小程序端&#xff0c;后台管理端以及后端。 小程序端提供给业主使用&#xff0c;实现的功能模块有公告通知、访客预约、车位申请、装修申请、一键报修、报修单、意见反馈、缴费通知、一键求助、个人信息管理&#xff1b; 后台…