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.mzph.cn/news/2828.shtml

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

相关文章

《遗留系统现代化》读书笔记(基础篇)

目录 为什么要对遗留系统进行现代化? 什么是遗留系统? 遗留系统的现代化价值 总结 遗留系统的四化建设 代码现代化 架构现代化 DevOps 现代化 团队结构现代化 总结 本文地址:《遗留系统现代化》读书笔记(基础篇&#xff…

通讯录(纯C语言实现)

相信大家都有过通讯录,今天我来带大家实现以下最简单的通讯录,通过本篇文章,相信可以让大家对C语言有进一步的认识。 话不多说,我们先放函数的实现 #define _CRT_SECURE_NO_WARNINGS 1 #include "Contact.h"int Chea…

高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测教程

详情点击链接:高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测 第一:预测平台及安装 一、高精度气象预测基础 综合气象观测数值模拟模式; 全球预测模式、中尺度数值模式; 二、自动化预测平台 Linux系统 Crontab…

记一次rabbitmq消息发送成功,消费丢失问题

记一次rabbitmq消息发送成功,消费丢失问题 背景 测试数据归档,偶现数据未归档 排查 idea线上调试,log日志,数据库消息发送记录,代码分块重复执行看哪块出的问题,结果均无问题,最后使用rabbi…

AI销售工具:驱动销售团队效率和个性化服务的未来

在数字化时代,AI销售工具成为推动销售行业发展的重要力量。这些创新工具融合了人工智能技术和销售流程,以提高销售团队的效率和提供个性化服务为目标。随着科技的不断进步,AI销售工具正引领着销售行业走向一个更加智能和高效的未来。 AI驱动的…

数据结构 ~ 栈、队列

栈 一个后进先出的数据结构、JS中没有栈,可以使用 Array 模拟 const stack [] stack.push(1) // 入栈 stack.push(2) // 入栈 const item1 stack.pop() // 出栈 const item2 stack.pop() // 出栈以上代码可以使用 nodeJs 断点调试(F5启动&#xff0…

【Linux】进程信号

文章目录 1. 信号的理解1.1 什么是进程信号1.2 见见进程信号1.3 信号的发送与记录1.4 信号的处理1.4.1 信号的三种处理方式1.4.2 核心转储 2. 信号的产生2.1 终端按键产生信号2.2 系统调用产生信号2.3 软件异常产生信号2.4 硬件异常产生信号 3. 信号的保存3.1 信号其他相关概念…

电子锁语音芯片方案,低功耗声音提示ic,WT588F02B-8S

随着科技的不断发展,电子锁已成为现代社会中,安全性和便利性并存的必备设备。如何为电子锁行业增添智能化、人性化的功能已成为行业内的热门话题。 在这个迅速发展的市场中,深圳唯创知音推出了一款语音交互方案——WT588F02B-8S 低功耗声音提…

UnxUtils工具包,Windows下使用Linux命令

1. 前言 最近写批处理多了,发现Windows下的bat批处理命令,相比Linux的命令,无论是功能还是多样性,真的差太多了。但有时候又不得不使用bat批处理,好在今天发现了一个不错的工具包:UnxUtils,这个…

Python多线程 threading 和多进程 multiprocessing

1. 并发 vs 并行 线程是程序执行的最小单位,一个进程可以由一个或多个线程组成,各个线程之间也是交叉执行。 并发,相当于单核CPU,宏观同时执行,微观高速切换 交替执行。多线程、高并发这些词语更多地出现在服务端程序…

06-C++ 基本算法 - 二分法

📖 前言 在这个笔记中,我们将介绍二分法这种基本的算法思想,以及它在 C 中的应用。我们将从一个小游戏猜数字开始,通过这个案例来引出二分法的概念。然后我们将详细讲解什么是二分法以及它的套路和应用。最后,我们还会…

在 3ds Max 中创建逼真的玻璃材质

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 尽管本教程基于 3ds Max,但相同的设置适用于许多其他 3D 产品。 注意:单击每个步骤中的缩略图可查看更大的屏幕截图,其中包括视口和用户界面的相关部分。 步骤 1由于本教…

广西学子复读15年,不服从分配。网友:完全是浪费时间

广西学子复读15年,不服从分配。网友:完全是浪费时间 唐尚珺的复读行为引起了网友们的不同解读。有人认为他是一个执念深重的人,目标是考上清华北大,但这个说法是否真实,我们无法确定。无论如何,我们必须认识…

electron+vue3全家桶+vite项目搭建【24】设置应用图标,打包文件的图标

文章目录 引入实现步骤测试结果 引入 demo项目地址 在electron中,我们可以通过electron-builder的配置文件来设置打包后的应用图标 实现步骤 因为mac环境下的图标需要特殊格式,这里我们可以利用electron-icon-builder进行配置 1.引入相关依赖 # 安…

GPT 如此强大,我们可以利用它实现什么?

GPT(Generative Pre-trained Transformer)是一种基于Transformer结构的预训练语言生成模型,由OpenAI研发。它可以生成高质量的自然语言文本,取得了很好的效果,被广泛应用于各个领域。以下是一些利用GPT实现的应用。 一…

ts中setState的类型

两种方法: 例子: 父组件 const [value, setValue] useState(); <ChildsetValue{setValue} />子组件 interface Ipros {setValue: (value: string) > void } const Child: React.FC<Ipros> (props) > {}

SpringMvc配置静态资源访问路径

文章目录 1. 整体流程2. registry.addResourceHandler()2.1 函数分析2.2 结果演示 3. ResourceHandlerRegistration.addResourceLocations()3.1 函数分析3.2 结果演示 1. 整体流程 1. 写一个配置类继承WebMvcConfigurationSupport 2. 利用 registry.addResourceHandler("…

Vue成绩案例实现添加、删除、显示无数据、添加日期、总分均分以及数据本地化等功能

一、成绩案例 ✅✅✅通过本次案例实现添加、删除、显示无数据、添加日期、总分均分以及数据本地化等功能。 准备成绩案例模板&#xff0c;我们需要在这些模板上面进行功能操作。 <template><div class"score-case"><div class"table">…

nginx基础3——配置文件详解(实用功能篇)

文章目录 一、平滑升级二、修饰符2.1 无修饰符效果2.2 精准匹配&#xff08;&#xff09;2.3 区分大小写匹配&#xff08;~&#xff09;2.4 不区分大小写匹配&#xff08;~*&#xff09;2.5 匹配优先级 三、访问控制四、用户认证五、配置https六、开启状态界面七、rewrite重写u…

matplotlib 3D

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np# 创建一个三维坐标轴 fig plt.figure() ax fig.add_subplot(221, projection3d) xx fig.add_subplot(222) yy fig.add_subplot(223) xy fig.add_subplot(224)# 生成示例数据…