首页 > 数据库 >Redis的缓存问题

Redis的缓存问题

时间:2024-10-16 17:49:47浏览次数:8  
标签:缓存 请求 过期 数据库 Redis 更新 问题 数据

缓存雪崩
  • 定义:缓存雪崩是指在某个时间段内,缓存中的大量数据同时失效或者大量的请求集中到某一个时间点发生,导致数据库压力骤增,甚至引起服务崩溃的现象。

  • 原因:通常是由于缓存中的大量数据同时过期或者大量的请求集中到某一时间点。例如,如果缓存中的大量数据在同一时间点过期,那么在数据重新加载到缓存之前,所有请求都会直接打到数据库,导致数据库压力骤增。还有一种情况就是缓存中间件宕机。

  • 解决方法:可以采取多种方式来缓解缓存雪崩的影响,例如设置不同的缓存过期时间、使用缓存预热、采用滑动过期时间等。

缓存穿透
  • 定义:缓存穿透是指恶意请求或者无效请求直接绕过缓存访问数据库,导致数据库压力过大,甚至造成服务宕机的现象。

  • 原因:通常是由于缓存中不存在的数据被请求,而且这些请求都直接绕过了缓存,直接查询数据库。如果攻击者通过构造恶意请求来访问不存在的数据,就可能触发缓存穿透。

  • 解决方法:可以采取多种方式来防止缓存穿透,例如使用布隆过滤器过滤无效请求、在缓存中预先存储空对象(缓存空值)、设置短期内的黑名单等。

缓存击穿
  1. 定义:

    • 缓存击穿是指一个非常热点的数据,在某个时间点过期了,此时大量的请求同时过来,这些请求发现缓存中没有数据,于是全部去访问数据库,导致数据库压力瞬间增大。

  2. 举例:

    • 比如一个热门商品的库存查询接口,在高并发情况下,这个商品的缓存数据刚好过期,瞬间大量的请求直接打到数据库上,可能导致数据库崩溃。

  3. 解决方案:

    • 设置热点数据永不过期。

    • 加互斥锁,当发现缓存过期时,只有一个线程去查询数据库并更新缓存,其他线程等待。

完整些

背景:在实际应用场景中,我们会在程序和数据库之间增加一个缓存层,用来提高数据检索的效率,同时降低数据库的并发压力。

定义:缓存击穿其实就是缓存层没有起到流量缓冲作用,请求因为某些原因全部打到了数据库中。

原因:我认为主要有两种情况导致:主要针对是否存在键。如果说存在键,在键过期的瞬间,有大量的请求进来,直接打到了数据库中。不存在键,也就是大量不存在key的请求,由于访问的key不存在,导致数据本身不存在。

总结:总之在使用Redis承担流量缓冲作用时,需要考虑失效时导致并发压力过大对后端存储设备造成冲击的问题

解决:

  • 首先可以对热点数据不设置过期时间,或者在每次访问时更新过期时间,来保证每次对热点数据的访问都能在缓冲区找到。

  • 其次可以对访问量较高的数据设置多级缓存数据,尽量减小后端存储设备的压力。

  • 还可以使用分布式锁,在缓存失效时,先去获取分布式锁,在从数据库中查找数据,写回缓存中,后续没有获得锁的线程只能等待和重试就行了,虽然该方案牺牲了一定的性能,但可以有效的保护数据库避免被压垮。

  • 对于恶意攻击类的场景,可以使用布隆过滤器,应用启动的时候把存在的数据缓存到布隆过滤器中,每次请求先经过布隆过滤器,若不存在,这说明数据一定没有在数据库中,没必要访问数据库。

缓存预热
  1. 定义:

    • 在系统启动或者新的缓存节点加入时,提前将一些可能被频繁访问的数据加载到缓存中,以避免在系统运行初期用户请求时频繁访问数据库,从而提高系统的响应速度和性能。

  2. 大白话理解:

    • 就好比你要开一家商店,在正式营业前,你先把一些热门商品摆到货架上(把热门数据放到缓存里),这样等顾客(用户请求)来的时候,就能很快地拿到商品(数据),而不用等你从仓库(数据库)里去取货,节省时间,提高顾客的满意度。

缓存更新
  1. 定义:

    • 当缓存中的数据发生变化时,需要及时更新缓存中的数据,以保证缓存中的数据与数据库中的数据一致。缓存更新可以通过主动更新或者被动更新的方式实现。

  2. 大白话理解:

    • 假设你的商店里的商品价格发生了变化(数据库中的数据变化了),你就得把货架上(缓存里)的商品价格标签也换一下,这样顾客看到的价格才是正确的。主动更新就是你自己主动去检查商品价格有没有变化,然后更新标签;被动更新就是等顾客发现价格不对告诉你了,你再去更新。

缓存降级
  1. 定义:

    • 当系统面临高并发、高负载或者出现故障时,为了保证核心功能的可用性,暂时降低非核心功能的服务质量或者关闭一些不太重要的功能,将原本需要从缓存中获取的数据改为直接从数据库或者其他数据源获取,或者返回一些默认值、旧数据等。

  2. 大白话理解:

    • 就像你的商店在高峰期的时候,人特别多,货架上的一些不太热门的商品来不及补货(缓存数据无法获取),这时候你就告诉顾客这些商品暂时没货,让他们先买其他热门商品(保证核心功能可用)。或者你直接拿一些旧的商品给顾客看(返回旧数据),等不那么忙的时候再去整理货架(恢复缓存数据)。

标签:缓存,请求,过期,数据库,Redis,更新,问题,数据
From: https://blog.csdn.net/qq_62097431/article/details/142960065

相关文章

  • Excel DLL丢失?Excel DLL文件下载指南及常见问题解决方案
    当您在使用MicrosoftExcel时遇到提示DLL文件丢失或损坏的情况,这可能会影响软件的正常运行。为了帮助您解决这一问题,本文提供了ExcelDLL文件的下载指南,并针对常见问题给出了解决方案。一、ExcelDLL文件下载指南确定缺失的DLL文件:首先,您需要确定是哪个DLL文件丢失或损坏......
  • Python入门:A+B问题
    1.A+B问题I前言本篇作为课程第一篇,主要是对Python基础语法进行扫盲,本节课会学习到下面知识:输入本道题目的工作任务很简单,只是计算两个数的和,但是在计算之前,我们首先要明确的一个问题就是如何把这两个数据输入到计算机中,并由程序读取呢?输入当然是使用键盘之类的输入设备完......
  • jmeter压测问题: JAVA.NET.BINDEXCEPTION: ADDRESS ALREADY IN USE: CONNECT
    1.报错信息:2. 问题排查  1)询问AI,说端口被占用。修改了jmeter的端口号后,仍是不行  2)最后找到一篇博客,真的解决了问题     我只进行了,增大端口号,减少Time_Wait, Close_WAIT没有处理,仍解决了此问题 ......
  • Redis 5.0 安装
    注意事项默认文件存放位置可执行文件(如redis、redis-server、redis-sentinel、redis-cli):/usr/local/bin库文件:/usr/local/lib配置文件:/usr/local/etc资源文件:/usr/local/share版本大全https://download.redis.io/releases/?_gl=1*1i0ead3*_gcl_au*MjAxNzQxMDA1Lj......
  • Redis 数据导入导出
    方式一:redis-dump前置安装redis-dumphttps://blog.csdn.net/zhanaolu4821/article/details/103684237数据导出##-uuri##-a密码##-ddatabase##导出所有库/usr/local/bin/redis-dump-u127.0.0.1:63790-a123456>/data/dba/yanhao/test/testredis.json##导......
  • jdk1.6,jdk1.7,jdk1.8安装共存问题
    1.今天遇到了需要编辑开发公司老项目的情况,之前本人电脑就装了1.6和1.8的jdk,现在老项目优需要安装jdk1.7运行,便有了这个问题,再次记录下2.首先需要安装对应的jdk,以及环境变量,我这里只展示三者共存的环境变量设置,其余单一的配置环境变量,网上都有就不在此啰嗦了3.用JAVA_H......
  • 使用CORS解决跨域问题
    如果发起请求所在主机(也称为域)和处理请求所在主机的协议、域名和端口号这三者中有任何一项不同,那么发出的请求就叫跨域请求。出于网络安全性方面的考虑,跨域请求会被限制,SpringBoot后端不能直接处理跨域请求,为了解决这一问题,可以在后端项目中引入CORS解决方案。在CORS(Cros......
  • (接上篇问题回答)OWASP Top 10 漏洞详解:基础知识、面试常问问题与实际应用
    1.SQL注入面试常见问题什么是SQL注入? SQL注入是一种网络安全漏洞,攻击者通过向SQL查询插入恶意代码,来干扰应用程序的数据库查询,导致未授权的数据访问或数据操纵。如何防止SQL注入? 防止SQL注入的方法包括:使用预编译的SQL语句(PreparedStatements)。使用ORM工具。严格验证和......
  • 面试关于HTTP协议,TCP/IP协议栈及相关其他常见问题总结
    面试常用知识点总结1.HTTP协议HTTP请求和响应的组成部分常见的HTTP方法及其用途常见的HTTP状态码及其含义HTTP/1.1和HTTP/2的主要区别无状态协议的含义及其影响2.TCP/IP协议栈TCP/IP协议栈的四层结构及其功能各层常见协议及其特点TCP和UDP的区别TCP三次握手和四次......
  • 【优化分配】遗传算法求解火力分配优化问题【含Matlab源码 7506期】
    ......