Redis-缓存问题及解决方案

本文已收录于专栏
《中间件合集》

目录

  • 概念说明
  • 缓存问题
    • 缓存击穿
      • 问题描述
      • 解决方案
    • 缓存穿透
      • 问题描述
      • 解决方案
    • 缓存雪崩
      • 问题描述
      • 解决方案
        • 提高缓存可用性
        • 过期时间配置
        • 熔断降级
  • 总结提升

概念说明

  Redis是一个开源的内存数据库,也可以用作缓存系统。它支持多种数据结构,包括字符串、列表、集合、哈希表、有序集合等。Redis的缓存功能主要通过将数据存储在内存中来提高读取速度,并且可以定期将数据持久化到磁盘上,以防止数据丢失。

Redis的缓存特点包括:

  1. 高性能:由于数据存储在内存中,读写速度非常快。
  2. 支持多种数据结构:可以存储不同类型的数据,包括字符串、列表、集合等。
  3. 分布式:可以部署在多台服务器上,支持数据的分布式存储和访问。
  4. 数据持久化:可以将数据定期或实时地持久化到磁盘上,以防止数据丢失。
  5. 支持事务:可以通过事务来保证多个操作的原子性。
  6. 支持发布订阅模式:可以实现消息的发布和订阅,用于消息队列等场景。

  虽然Redis给我们提供了非常方便的服务,但是在使用Redis的时候也需要注意其中的一些问题,包括缓存击穿、缓存穿透、缓存雪崩等问题,这些问题可能会导致我们的服务不能提供正常的服务,下面我们就详细说一下这些问题以及对应的解决方案。

缓存问题

缓存击穿

问题描述

  缓存击穿(Cache Breakdown): 缓存击穿指的是针对某个热点数据的并发访问,当某个数据在缓存中过期或者被删除时,大量的并发请求同时访问该数据,导致这些请求都直接访问数据库。这会导致数据库负载剧增,严重影响系统性能。
在这里插入图片描述

解决方案

  1、加锁更新:在缓存失效时,只允许一个线程去查询数据库,其他线程等待结果即可。⽐如请求查询A,发现缓存中没有,对A这个key加锁,同时去数据库查询数据,写⼊缓存,再返回给⽤户,这样后⾯的请求就可以从缓存中拿到数据了。
在这里插入图片描述

  2、预先加载热点数据:在缓存失效前主动加载热点数据到缓存中,避免缓存失效时的并发访问。

缓存穿透

问题描述

  缓存穿透(Cache Penetration): 缓存穿透指的是查询一个不存在的数据,由于缓存中没有该数据,每次查询都直接访问数据库。这种情况可能是恶意攻击或者查询不存在的数据导致,但无论原因如何,都会导致数据库压力过大。
在这里插入图片描述

解决方案

  1、缓存控制/默认值:在数据库不命中之后,把⼀个空对象或者默认值保存到缓存,之后再访问这个数据,就会从缓存中获取,这样就保护了数据库。
在这里插入图片描述
  2、布隆过滤器:详细了解布隆过滤器请参考下面这篇博客:https://wzill.blog.csdn.net/article/details/136021578

缓存雪崩

问题描述

  缓存雪崩(Cache Avalanche): 缓存雪崩指的是在某个时间点,大量缓存数据同时失效,导致大量请求直接访问数据库,导致数据库压力过大,甚至宕机。这种情况可能是由于缓存数据的过期时间设置相近,或者服务器宕机导致的。缓存雪崩是三⼤缓存问题⾥最严重的⼀种。
在这里插入图片描述

解决方案

提高缓存可用性
  1. 集群部署:通过集群来提升缓存的可⽤性,可以利⽤Redis本⾝的Redis Cluster或者第三⽅集群⽅案如Codis等
  2. 多级缓存:设置多级缓存,第⼀级缓存失效的基础上,访问⼆级缓存,每⼀级缓存的失效时间都不同。
过期时间配置
  1. 均匀过期:为了避免⼤量的缓存在同⼀时间过期,可以把不同的 key 过期时间随机⽣成,避免过期时间太过集中。
  2. 热点数据永不过期。
熔断降级
  1. 服务熔断:当缓存服务器宕机或超时响应时,为了防⽌整个系统出现雪崩,暂时停⽌业务服务访问缓存系统
  2. 服务降级:当出现⼤量缓存失效,⽽且处在⾼并发⾼负荷的情况下,在业务系统内部暂时舍弃对⼀些⾮核⼼的接⼜和数据的请求,⽽直接返回⼀个提前准备好的 fallback(退路)错误处理信息。

总结提升

  在实际应用中,缓存击穿、缓存穿透和缓存雪崩是常见的缓存问题,可以通过合理的缓存策略和技术手段来避免或者减轻这些问题带来的影响。

在这里插入图片描述


🎯 此文章对你有用的话记得留言+点赞+收藏哦🎯

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

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

相关文章

zabbix配置监控脚本

zabbix配置监控脚本 1.修改agent配置文件 [rootchang ~]# vim /etc/zabbix/zabbix_agentd.conf 333行 原# UnsafeUserParameters0 修改成 UnsafeUserParameters12.创建脚本与脚本存放目录 [rootchang ~]# mkdir /etc/zabbix/zabbix_scripts [rootchang zabbix_scripts]# vi…

Springboot写一个对接钉钉机器人的小插件

钉钉机器人 有时候我门需要监控各种事件,需要机器人给我发给提醒 如:git代码交接,代码合并, 服务器异常捕获,。。。。 参照钉钉给我们的开发文档,可以发现对接起来是非常简单哈哈 这是我写的小插件以及例子…

基恩士 KV-8000 PLC通讯简单测试

1、KV-8000通讯协议 基恩士 KV-8000 PLC支持多种通讯方式,包括:OPC UA、Modbus、上位链路命令等。其中OPC UA需要对服务器和全局变量进行设置,Modbus需要调用功能块。默认支持的是上位链路命令,实际是一条条以回车换行结束的ASCII…

06、全文检索 -- Solr -- Solr 全文检索之在图形界面管理 Core 的 Schema(演示对 普通字段、动态字段、拷贝字段 的添加和删除)

目录 Solr 全文检索之管理 Schema使用Web控制台管理Core的Schema3 种 字段解释:Field:普通字段Dynamic Field:动态字段Copy Field:拷贝字段 演示:添加 普通字段( Field )演示:添加 动…

代码随想录算法训练营第三十五天|343. 整数拆分 , 96.不同的二叉搜索树

343. 整数拆分 代码随想录 视频讲解:动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分_哔哩哔哩_bilibili class Solution {public int integerBreak(int n) {// 1.确定dp数组(dp table)以及下…

电脑文件误删除怎么办?8个恢复软件解决电脑磁盘数据可能的误删

您是否刚刚发现您的电脑磁盘数据丢失了?不要绝望!无论分区是否损坏、意外格式化或配置错误,存储在其上的文件都不一定会丢失到数字深渊。 我们已经卷起袖子,深入研究电脑分区恢复软件的广阔领域,为您带来一系列最有效…

浅压缩、深压缩、双引擎、计算机屏幕编码……何去何从?

专业视听领域尤其显示控制和坐席控制领域,最近几年最激动人心的技术,莫过于分布式了。 分布式从推出之日就备受关注:担心稳定性的,质疑同步性能的,怀疑画面质量的…… 诚然,我们在此前见多了带着马赛克的…

Redis核心技术与实战【学习笔记】 - 20.Redis原子操作及并发访问

概述 使用 Redis 时,不可避免地会遇到并发访问的问题,比如说如果多个用户同时下单,就会对缓存在 Redis 中的商品库存并发更新。一旦有了并发写操作,数据就会被修改,如果我们没有对并发写请求做好控制,就可…

Java on Azure Tooling 2024年1月更新|Azure Key Vault 支持、示例项目创建支持及更多

作者:Jialuo Gan - Program Manager, Developer Division At Microsoft 排版:Alan Wang 大家好,欢迎来到 2024 年 Java on Azure 工具的首次更新。在本次更新中,我们将介绍对于 Azure Key Vault 支持、基于 Azure 示例项目的创建支…

Kafka系列(二)将消息数据写入Kafka系统--生产者【异步发送、同步发送、单线程发送、多线程发送、配置生产者属性、自定义序列化、自定义主题分区】

Kafka系列 发送消息到 Kafka 主题了解异步模式了解同步模式线程发送消息的步骤生产者用单线程发送消息生产者用多线程发送消息 配置生产者属性保存对象的各个属性一序列化序列化一个对象序列化对象的存储格式自己实现 序列化的步骤1. 创建序列化对象2. 编写序列化工具类3. 编写…

[技术杂谈]如何下载vscode历史版本

网站模板: https://code.visualstudio.com/updates/v1_85 如果你想下载1.84系列可以访问https://code.visualstudio.com/updates/v1_84​​​​​​ 然后看到: 选择对应版本下载即可,我是windows x64系统选择x64即可开始下载

Element UI+Spring Boot进行CRUD的实例

ElementUI安装与使用指南 前端代码:点击查看learnelementuispringboot项目源码 后端代码:点击查看 LearnElementUiAndSpringBoot 一、前端配置 安装axios axios官网axios中文文档安装指令:npm install axios 二、后端配置 springboot3m…