Redis(六)之问题与解决

Redis学习笔记(六)—— 解决安装ruby出现的问题:redis requires Ruby version >= 2.2.2. 一、问题描述今天搭建redis集群,在安装ruby和redis的接口程序时出现问题:redis requires Ruby version >= 2.2.2.,如下所示:[root@localhost ~]# gem install redis-4.0.0.gem ERROR: Error installing redis-4.0.0.gem: redis require... 阅读详情

请问大家,在使用redis的过程中有没有遇到过什么问题呢?比如缓存雪崩,缓存穿透,阻塞等。这些问题的产生原因是什么呢?又该怎么解决呢?本篇文章就说说这个。

阻塞

因为redis是单线程架构,所有的读写操作都是在一条主线程中完成的,所以一旦出现阻塞,将是致命的。

内在原因

(1)API或数据结构使用不合理

// 获取最近的10条慢查询
slowlog get 10

(2)CPU饱和
(3)持久化相关的阻塞:fork阻塞、aof刷盘阻塞、hugepage写操作阻塞

外在原因

(1)CPU竞争
(2)内存交换
(3)网络问题:连接拒绝、网络延迟、网卡软中断

解决措施

(1)在应用方加入异常监控,并要定位到具体的出问题的结点
(2)Redis的监控

缓存相关

更新策略

redis中的数据通常都是有生命周期的,需要在特定时间后被删除或更新,这样可以保证缓存空间在一个可控的范围。有3种缓存更新策略。

(1)LRU/LFU/FIFO算法剔除

当缓存使用量超过了预设的最大值时,会启动策略对数据进行清除。

LRU:最近最久未使用
LFU:最近最少使用
FIFO:先进先出

(2)超时剔除

在将数据放入缓存时,已经设置了过期时间,当到时间后,自动将其删除。使用命令expire来实现。

(3)主动更新

对数据进行“增删改”操作后,立即清除redis中的相关数据

缓存穿透

1、概念

缓存穿透是指查询一个数据库不存在的数据,每次都去查询数据库,而每次查询都是空,每次又都不会进行缓存。假如有大量请求进来,可能会压垮数据库。

2、产生的原因

(1)自身业务代码或者数据出现问题
(2)一些恶意攻击,爬虫等造成大量空命中

3、解决措施

(1)缓存空对象

当数据库不命中后,仍然将空对象保留到缓存层中,之后再访问这个数据,将会从缓存中获取,这样就保护了后端数据源。
在这里插入图片描述
实现代码如下:

String get(String key){
     //从缓存中获取数据
     String cacheValue=cache.get(key);
     //缓存为空
     if(StringUtils.isBlank(cacheValue)){
         //从存储中获取
         String storageValue=storage.get(key);
         cache.set(key,storageValue);
         //如果存储数据为空,需要设置一个过期时间(300秒)
         if(storageValue==null){
             cache.expire(key,60*5);
         }
         return storageValue;
     }else{
       //缓存非空
       return cacheValue;
     }
}

此解决办法的使用场景为:数据命中不高且数据频繁变化实时性高。

(2)布隆过滤器拦截

将存在的key放入布隆过滤器中。当一个查询请求过来时,先经过此过滤器,如果此过滤器认为该数据不存在,就直接丢弃,不再继续访问缓存层和存储层。
在这里插入图片描述
此解决办法的适用场景为:数据命中不高,数据相对固定、实时性低

无底洞

1、概念

为了满足业务需求,大量添加redis集群的节点,但是性能没提升反而下降。

2、产生的原因

在单机操作中,如果想批量获取多个key,只需一次网络操作即可,在集群中,节点越多,涉及的网络IO就越多,性能就可以能会下降。

3、解决办法

(1)串行命令
(2)串行IO
(3)并行IO
(4)hash_tag实现

缓存雪崩

1、概念

缓存雪崩是指在设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,导致所有的查询都落在数据库上,造成了缓存雪崩。

2、解决办法

(1)不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
(2)如果缓存数据库是分布式部署,将热点数据均匀分布在不同的缓存数据库中。
(3)设置热点数据永远不过期。
(4)做二级缓存。
(5)在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

Redis线上问题排查指南:常见错误与解决思路 Redis线上问题排查思路与解决方案明确现象:连接失败?性能下降?数据异常?定位方向:网络 > 配置 > 资源 > 数据 > 集群工具辅助infoslowlogmemory验证解决:变更后通过压测验证效果附录:常用命令速查表# 实时监控 redis-cli monitor # 内存分析 redis-cli memory stats # 连接池诊断 redis-cli client list通过系统化的排查思路和工具链,Redis线上问题将不再令人头疼。获取更多技术干货,欢迎关注博主!💡。 阅读详情

相关推荐

简述Redis中怎么安装一个六节点集群 ?

通过以上步骤,30 分钟内即可完成一个高可用的 Redis 集群部署。实际生产环境中建议结合监控工具(如 Prometheus)跟踪节点状态和内存使用[citation:5][citation:8]。其他端口(7001-7005)重复此步骤,修改。名称[citation:4]。(以 7000 端口为例)

weixin_39291964的博客 142

Redis读书笔记(七)缓存

缓存的有点: 1)加速读写,因为缓存都是全内存的(比如Redis和Memcached),而存储层通常读写性能不够强悍,通过缓存可以有效地加速读写。 2)帮助减少后端的访问量和复杂计算,降低了后端的负载。 数据不一致:缓存层和存储层的数据存在着一定的时间窗口不一致性。 缓存的使用场景基本包含如下两种: 1)开销大的复杂计算,一些复杂的操作或者计算(例如大量的联表查询,分组计算),如果不加缓存,不但...

245

使用PLINK做GWAS(2)

利用PLINK对单基因控制的性状进行定位,之前一篇文章粗滤的记录了一下使用PLINK的命令,本次博客主要记录一下如何根据SNP芯片的数据制作PLINK的格式,以及分析的步骤,最后数据的可视化。 首先,有的公司给的新片的数据就是一个excel表格,列表示的是样品,行表示的是基因型,基因型用ATCG构成,当然有的基因型是用数字0或者1表示的。下面我拿到的一个数据是15个样品构成的基因型,有13个样品是突变体,2个样品是野生型。 格式如下: 第二步:将此基因型存成csv文件,使用R进行读取,在R中制作pl

samhuairen的专栏 2921

《Redis开发与运维》学习第十一章

文章目录十一章 缓存设计1 缓存的收益和成本2 缓存更新策略的选择和使用场景3 缓存粒度控制方法4 穿透问题优化5 无底洞问题优化6 雪崩问题优化7 热点key重建优化 十一章 缓存设计 1 缓存的收益和成本 图中,左侧为客户端直接调用存储层的架构,右侧为经典的缓存层+存储层架构。分析一下加入缓存后的收益和成本: 收益: 1)加速读写:缓存通常是全内存的 2)降低后端负载:可以帮助后端减少访问量和复杂计算 成本: 数据不一致:缓存层和存储层的数据存在着一定时间窗口的不一致性 2)代码维护成本:加入缓存

weixin_48433164的博客 888

(七)独立按键

(七)独立按键

m0_52555663的博客 1713

K230+canMV开发中常见的数据类型转换参考示例

【代码】K230+canMV开发中常见的数据类型转换参考示例。

weixin_47446386的博客 67

十二、缓存设计

缓存能够有效地加速应用读写速度,同时也可以降低后端负载,对日常应用地开发至关重要。但是将缓存加入应用架构后也会带来一些问题,本章将针对这些问题介绍缓存使用技巧和设计方案,包含如下内容: 缓存的收益和成本分析。 缓存更新策略的选择和使用场景。 缓存粒度控制方法。 穿透问题优化。 无底洞问题优化。 雪崩问题优化。 热点key重建优化。 一、缓存的收益和成本 上图左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构,下面分析一下缓存加入后带来的收益和成本。 收益如下: 加速读写:因为缓存通

苏迪的博客 399

基于SSD2828和STM32的MIPI显示屏驱动系统设计与实现

在硬件层面,需要将STM32、SSD2828和MIPI显示屏连接起来。STM32与SSD2828的连接:通过SPI接口连接STM32和SSD2828,用于配置和控制SSD2828。SSD2828与MIPI显示屏的连接:通过MIPI DSI接口连接SSD2828和MIPI显示屏,用于传输显示数据。

qq_38334677的博客 7143

小仙女讲Redis(2)——问题与解决

请问大家,在使用redis的过程中有没有遇到过什么问题呢?比如缓存雪崩,缓存穿透,阻塞等。这些问题的产生原因是什么呢?又该怎么解决呢?本篇文章就说说这个。 阻塞 因为redis是单线程架构,所有的读写操作都是在一条主线程中完成的,所以一旦出现阻塞,将是致命的。 内在原因 (1)API或数据结构使用不合理 // 获取最近的10条慢查询 slowlog get 10 (2)CPU饱和 (3)持久化相...

玫瑰与鹿° 1004

视觉Transformer实战 | 将卷积引入视觉Transformer(CvT)

CvT 是一种融合卷积神经网络与 Vision Transformer 优势的视觉模型,旨在解决 ViT 缺乏平移不变性和局部性等归纳偏置的问题。CvT 采用分层结构逐级降采样,使用卷积词元嵌入代替传统 patch 切分,引入卷积投影替代线性投影。这些设计使得 CvT 能够去除位置编码,在高分辨率输入下表现更优。本节深入解析 CvT 的核心原理,并提供完整的 PyTorch 代码实现,演示如何在实际数据集上训练和评估 CvT 模型。

盼小辉丶的博客 726

手把手教你学 AI芯片 SOC软件开发专栏简介

在AI芯片(如NPU、GPU加速器)爆发式增长的今天,软件栈开发已成为AI应用落地的核心瓶颈。无论是模型推理加速、低延迟部署,还是能效优化,都依赖于对芯片底层软件的深度掌握。然而,许多开发者困于“只会调用API,不懂驱动实现”的困境,导致性能瓶颈难以突破。本专栏《手把手教你学 AI芯片 SOC软件开发》专为AI工程师、嵌入式开发者及系统架构师打造,从零基础切入,系统拆解AI芯片SOC(System on Chip)的完整软件栈,覆盖Runtime(运行时)

MHD0815的博客 168

缓存失效策略(FIFO 、LRU、LFU三种算法的区别)

当缓存需要被清理时(比如空间占用已经接近临界值了),需要使用某种淘汰算法来决定清理掉哪些数据。常用的淘汰算法有下面几种: FIFO:First In First Out,先进先出。判断被存储的时间,离目前最远的数据优先被淘汰。LRU:Least Recently Used,最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。LFU:Least Frequently Used,最

Clement-Xu的专栏 2万+

我的PCB设计经验总结及最容易犯错的100例之二B07

本文总结了PCB设计中的常见错误及解决方法。作者通过记录自身及他人的设计失误,系统归纳了高频、隐蔽且致命的问题,如电容中间穿线、高速信号跨分割、锐角布线等。重点提出从错误中提炼规律,建立分类案例库,并开发自动化检查工具的方法。案例涵盖高速信号处理、电源设计、EMC防护等关键领域,强调通过原理理解和实践验证提升设计质量。文章建议工程师建立个人错误数据库,从被动纠错升级为主动预防,最终形成系统化的设计方法论,提高PCB一次成功率。

启芯硬件的博客 82

六、redis中AKF问题解决方案

导读 前面文章【一、深入理解redis之需要掌握的知识点 】中,我们对redis需要学习的内容框架进行了一个梳理。 【二、redis中String和List两种数据类型和应用场景 】、【二、redis中Hash、Set、SortedSet应用场景 】两篇文章我们对redis中String、List、Hash、Set、SortedSet五种数据类型做了一下讲解,并且对他们各自的应用场景进行了介绍。 【三、redis数据存储之跳跃表(SKIP LIST) 】深入学习了支撑SortedSet排序背后的数据结构,跳

不吃_花椒的博客 2387

【人工智能】Open WebUI 安装指南 ( 基于Docker下载和使用Open WebUI 、通过本地运行项目源码进行搭建Open WebUI)

Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 WebUI,旨在完全离线操作。它支持各种 LLM 运行程序,包括 Ollama 和 OpenAI 兼容的 API。社区:https://openwebui.com/

奶爸的编程之路,也就一周冷个三天 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Redis在生产环境中可能遇到的问题与解决方案(六)

这些问题和解决方案是在更为特定的应用场景下可能遇到的,实际问题可能会更加复杂。根据具体的业务情况和系统架构,需要灵活选择合适的解决方案。希望这些建议对你在 Redis 高级应用中的实际问题有所帮助。

我命由我不由天 773

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Redis入门学习笔记【六】如何解决 Redis 的并发竞争Key问题

所谓 Redis 的并发竞争 Key 的问题也就是多个系统同时对一个 key 进行操作,但是最后执行。基于zookeeper临时有序节点可以实现的分布式锁。在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。获取锁的方式很简单,只需要判断有序节点中序号最小的一个。当释放锁的时候,只需将这个瞬。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。在实践中,当然是从以可靠性为主。的顺序和我们期望的顺序不同,这样也就导致了结果的不同!流程后,删除对应的子节点释放锁。

一个老码农 325

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

六、redis分布式锁-解决超卖问题

package com.gaia.test.redisTest.distributelock; import com.gaia.test.redisTest.util.JedisPoolInstance; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import java.util.UUID; /** * Description: * * @author xuzhiqiang * Date 20

XZQ_STUD的博客 418

redis 三主六从高可用docker(不固定ip)

此博客解决,redis加入集群后,是用于停掉后重启,将nodes.conf中的旧的Ip替换为新的IP,从而达到不会因为IP变化导致集群无法正常使用跨主机安装rediscluster集群,本文采用swarm的方式,使用同一个网络,然后分别在对应的机器启动。

liuhm的博客 1014

redis集群(三主三从)

一、下载redis 下载地址:http://download.redis.io/releases/ wget http://download.redis.io/releases/redis-6.0.0.tar.gz 二、解压 tar xzvf redis-6.0.0.tar.gz 三、安装 cd redis-6.0.0   make   cd src   make install PREFIX=/usr/local/red...

weixin_42492256的博客 611

redis主从集群搭建,三主六从

redis集群搭建三主六从节点

ChaoandPeng的博客 1800

Redis SAVE 命令不可用问题解决方案

Redis SAVE命令不可用问题解决方案摘要 当出现ERR unknown command 'SAVE'错误时,表明Redis服务器禁用了SAVE命令。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6987

redis:Redis Big Key问题深度解析与解决方案

预防为主:建立完善的监控和预警机制拆分优先:采用垂直/水平拆分方案渐进处理:使用SCAN系列命令逐步操作智能治理:结合自动压缩和本地缓存建立Key规范(如:String≤10KB,Hash≤1000元素)实现实时监控大盘(Grafana+Prometheus)开发自动处理工具(自动拆分/压缩/迁移)定期执行Big Key扫描(redis-cli --bigkeys)关键操作添加熔断保护(Hystrix/Sentinel)

weixin_43290370的博客 1665

Redis热点Key问题分析与解决

不知道你们有没有遇到过这种现象:Redis缓存中数据存储不多,但是集群中某些个别节点的Redis实例CPU消耗和内存、网络等资源负载很高,有时候还可能莫名奇妙的某个节点宕机。遇到以上问题的时候,那基本恭喜你了,大多数情况下,不出意外的话,可能就是遇到了热点Key问题。那么Redis热点Key形成的原因是什么呢?该如何检测?该如何解决呢?如果你有这样的疑问,那就来看看我的文章吧!

qq_25409421的博客 2570

解决了Redis大key问题

荐言 Redis大key的问题,是开发之初容易被忽视的问题。因为它需要数据量比较大的特殊场景才显现,所以这些问题一般都会出现在线上生产环境上,大白的这篇文章,故事性的通俗易懂的文字加上图解,讲解了Redis大key问题,推荐给大家。 前言 前几天元宵节,小黑准时下班回到家,吃着汤圆,看着电视,好生惬意! 忽然,手机叮咣叮咣响个不停报警,看了下是某个服务调用Redis异常了。 放下饭碗,小黑打开电脑一顿排查,最终定位到是Redis有大key问题。 寻思一时半会儿也解决不了,明天到公司再搞,先继续看

Java搜索工程技术栈 6318

Redis解决实现秒杀+解决超卖问题

利用hash结构替代string结构(记录获取锁的线程和重入次数),hash key-field-value,多存入一个value字段,用来记录获取锁的次数,所以当某一线程进行业务操作时(不止需要一次锁),可以多次获取锁,只有当value= 0时,锁才会被删除。不难看出当线程一获取锁业务阻塞后,此时锁超时自动释放锁(锁被误删),而线程一继续执行业务时,会继续释放锁从而删除其他线程的锁,因为我们的key值为 业务名+ “order:userId”,所以会出现并行情况,造成线程安全问题。

m0_74927596的博客 2933
上一篇: Java基础之创建对象的四种方式
下一篇: 【毕业设计】在线学习平台
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值