为什么redis会开小差?Redis 频繁异常的深度剖析与解决方案

news2025/1/27 4:20:46

文章目录

  • 导读
  • 为什么redis会开小差?
  • 1.连接数过多
  • 2.bigkey
  • 3.慢命令操作
  • 4.内存策略不合理
  • 5.外部数据双写一致性
  • 6.保护机制未开启
  • 7. 数据集中过期
  • 8. CPU饱和
  • 9. 持久化阻塞
  • 10. 网络问题
  • 结论

导读

提起分布式缓存,想必大多数同学脑海中都会浮出redis这个名字来……但是,对于它,你真的玩转了吗?为什么你的redis会慢,会卡顿,会崩溃?现在带你一探究竟。
在这里插入图片描述

为什么redis会开小差?

本文主要简要介绍redis使用过程中可能遇到的一些意外情况,只讲原因,并不过多分析细节,对于细节问题,读者可自行查询相关资料。

1.连接数过多

  • 限制了redis最大连接数(maxclients),高并发场景下,达到该值,那么新的请求无法获取连接执行读写操作
  • 没有限制,那么连接数在达到5000以上时(2g4c),可能影响到性能,在更高请求或更低配置机器情况下,数据会更低
    针对这种情况,建议开启限制最大连接数,同时预估客户端数量,控制好连接参数;同时需要确认请求操作后所使用的连接是否被释放的问题。

2.bigkey

如果一个key的value过大,则被称为大key。主要包括:

  • 单个简单的key存储的value很大
  • hash, set,zset,list 中存储过多的元素(以万为单位)
    若单key过大,读写频繁,那么数据读写中的序列化、网络传输等本身就是瓶颈点。

3.慢命令操作

  • 危险命令:keys。执行全量扫描,在数据量大的场景下,将引起整个redis阻塞
  • O(N)命令:hgetall、lrange、smembers、zrange、sinter、hkeys、hvals等,慎用。如需要使用,提前预估数据,一般认为应该控制在元素量控制在5K以内,如果的确过大,则需要根据实际机器配置评估验证。
  • monitor命令:主要用于debug使用,生产环境长时间开启对性能有较大影响

4.内存策略不合理

在redis.conf中有一行配置,关于内存淘汰策略的说明

maxmemory-policy volatile-lru
当redis占用达到指定的maxmemory值时,会触发redis部分key的移除以释放内存。

  • 如果选择不当的策略,可能会造成部分key被除后读不到引发意外。
  • 如果选择策略noeviction,不会释放内存,但是对于写操作会提示错误。
  • 如果读写并发高,可能出现频繁的内存释放,导致系统卡顿。
    遇到报错或者获取key内容丢失,未必是redis故障,因为也这是一种自我保护机制。

5.外部数据双写一致性

在分布式的环境下,数据库和缓存双写,存在一致性问题,如果要求强一致性,那么redis会受到db的影响造成瓶颈。此时一般建议走最终一致,通过异步(如消息队列)方式来实现。需要站在架构设计的角度来对待redis的使用。

6.保护机制未开启

redis有一种保护机制,默认情况下是开启的。但有些时候为了图方便,没有开启该机制,同时将redis暴露于公网,此时容易受到外部攻击,导致redis甚至操作系统不可用。在生产环境还是要有提高安全的意识。

7. 数据集中过期

Redis的主动过期的定时任务,也是在Redis主线程中执行的,如果出现了需要大量删除过期key的情况,那么主线程会出现阻塞(最大25s)。而且这个访问延迟的情况,不会记录在慢日志里。

解决方案是,在集中过期时增加一个随机时间,把这些需要过期的key的时间打散即可。

8. CPU饱和

对于这种情况,首先判断当前Redis的并发量是否达到极限,建议使用统计命令redis-cli-h{ip}-p{port}–stat获取当前 Redis使用情况。对于并发量达到极限这种情况,我们需要做集群化水平扩展来分摊OPS压力。如果没有低并发就接近CPU饱和是很不正常的,有可能使用了高算法复杂度的命令。还有一种情况是过度的内存优化,需要我们根据infocommandstats统计信息分析出命令不合理开销时间(比如上万个元素却采用ziplist编码,虽然hash结构内存占用会变小,但是操作变得更慢且更消耗CPU)

9. 持久化阻塞

持久化引起主线程阻塞的操作主要有:fork阻塞、AOF刷盘阻塞、 HugePage写操作阻塞。

HugePage写操作阻塞:子进程在执行重写期间利用Linux写时复制技术降低内存开销,因此只有写操作时Redis才复制要修改的内存页。对于开启Transparent HugePages的 操作系统,每次写命令引起的复制内存页单位由4K变为2MB,放大了512 倍,会拖慢写操作的执行时间,导致大量写操作慢查询。例如简单的incr命 令也会出现在慢查询中。

10. 网络问题

可能有这三种情况:网络闪断、Redis连接拒绝、连接溢出。

Redis连接拒绝。Redis通过maxclients参数控制客户端最大 连接数,默认10000。

连接溢出。这是指操作系统或者Redis客户端在连接时的问题。这个问题的原因比较多,比如进程限制、 backlog队列溢出。
如何快速定位慢的原因?
常用工具,redis内部命令如info、slowget慢查询,内存分析排查可参考redis-rdb-tool等。当然,完善的监控系统能让我们更快,更准地解决,这里建议telegraf+influxdb+grafana组合实现图形化监控预警。

结论

对于使用不当引起的风险操作,需要对症下药。2.对于海量数据、高并发这种的确因为正常需求引起的资源不足问题的场景,就需要考虑扩容的方式来解决。3.做好准备工作、善用工具、建立监控预警机制,将使你对redis的维护工作事半功倍。

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

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

相关文章

C# Interlocked 类使用详解

总目录 前言 在多线程编程中,确保多个线程对共享资源的安全访问是一个关键挑战。C# 提供了多种同步机制来处理并发问题,其中 System.Threading.Interlocked 类提供了一种轻量级的方法来进行原子操作。它允许您执行一些常见的增量、减量、交换等操作&…

VS Code i18n国际化组件代码code显示中文配置 i18n ally

VUE项目做i18n国际化之后,代码中的中文都变成了code这时的代码就会显得非常难读,如果有一个插件能把code转换成中文显示就好了 vscode插件搜索“i18n ally” 在项目根文件夹下创建文件:.vscode/settings.json settings.json 内容如下 {"…

MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log

文章目录 一、前言1.1 MySQL体系结构1.2 MySQL日志分类1.3 其他几种日志1.3.1 查询日志1.3.2 慢查询日志1.3.3 错误日志 二、bin log 二进制日志2.1 bin log简介2.2 binlog日志格式2.3 日志删除2.4 写入/刷盘机制 三、undo log 回滚日志3.1 undo log简介3.2 隐藏字段 —— 事务…

一文速通stack和queue的理解与使用

CSTL之stack和queue 1.stack1.1.stack的基本概念1.2.stack的接口 2.queue2.1.queue的基本概念2.2.queue的接口 3.priority_queue3.1.priority_queue的基本概念3.2.priority_queue的接口3.3.仿函数 4.容器适配器5.deque5.1.deque的简单了解5.2.deque的优缺点 🌟&…

关于CAN(FD)转以太网详细介绍

一、功能描述 CANFD 完全向下兼容 CAN ,以下统称 CAN(FD) 。 SG-CAN(FD)NET-210 是一款用来把 CANFD 总线数据转为网口数据的设备。 网口支持 TCP Sever 、 TCP Client 、 UDP Sever 、 UDP Client 四种模式。 可以通过软件配置和 Web 网页配置。 两路…

orbbec 奥比中光相机单目及多目调用方式python代码

这篇文章会介绍使用orbbec相机的一些常用代码梯子 orbbec 奥比中光Astra相机单目及多目调用方式编译sdk调用单相机调用多相机orbbec 奥比中光Astra相机单目及多目调用方式 Orbbec相机是一个专注于深度感知和计算机视觉应用的设备,通常用于3D扫描、手势识别、增强现实(AR)以及…

力扣hot100-->滑动窗口、贪心

你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…

PBFT算法

在我的博客中对于RAFT算法也有详细的介绍,raft算法包含三种角色,分别是:跟随者( follower ),候选人(candidate )和领导者( leader )。集群中的一个节点在某一…

跨境电商代购系统独立站深度分享

在全球化日益加深的今天,跨境电商代购系统独立站作为一种新兴的电子商务模式,正逐渐成为连接全球消费者与优质商品的重要桥梁。本文将详细介绍跨境电商代购系统独立站的基本功能以及技术实现的重难点,以期为相关从业者提供一些有价值的参考和…

携程旅行 登录分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 所有加密流程基本一样就说…

西藏酥油茶:高原上的醇香温暖

西藏酥油茶:高原上的醇香温暖 在西藏高原,有一种饮品,它不仅滋养了一代又一代的藏民,还承载着丰富的文化与历史,它就是西藏酥油茶。酥油茶,藏语称为“恰苏玛”,意为搅动的茶,是藏族人民日常生活中不可或缺的一部分,更是待客、祭祀等活动中的重要礼仪物品。 历史与文化渊源 酥…

刷题总结 回溯算法

为了方便复习并且在把算法忘掉的时候能尽量快速的捡起来 刷完回溯算法这里需要做个总结 回溯算法的适用范围 回溯算法是深度优先搜索(DFS)的一种特定应用,在DFS的基础上引入了约束检查和回退机制。 相比于普通的DFS,回溯法的优…

Antd React Form使用Radio嵌套多个Select和Input的处理

使用Antd React Form使用Radio会遇到嵌套多个Select和Input的处理&#xff0c;需要多层嵌套和处理默认事件和冒泡&#xff0c;具体实现过程直接上代码。 实现效果布局如下图 代码 <Formname"basic"form{form}labelWrap{...formItemLayoutSpan(5, 19)}onFinish{on…

Linux(Centos、Ubuntu) 系统安装jenkins服务

该文章手把手演示在Linux系统下如何安装jenkins服务、并自定义jenkins数据文件位置、以及jenkins如何设置国内镜像源加速&#xff0c;解决插件下载失败问题 安装方式&#xff1a;war包安装 阿里云提供的war下载源地址&#xff1a;https://mirrors.aliyun.com/jenkins/war/?s…

【基于无线电的数据通信链】Link 11 仿真测试

〇、废话 Link 11 仿真测试 涉及多个方面&#xff0c;包括信号仿真、协议模拟、数据链路层的仿真以及网络性能评估等。Link 11 是一种基于 HF&#xff08;高频&#xff09; 或 UHF&#xff08;超高频&#xff09; 波段的无线通信协议&#xff0c;主要用于军事通信系统中。为了…

VScode 开发 Springboot 程序

1. 通过maven创建springboot程序 输入 mvn archetype:generate 选择模板&#xff0c;一般默认选择为第 7 种方式&#xff1b; 选择之后&#xff0c;一般要你填写如下内容&#xff1a; groupId: 组织名称&#xff1b;artifactId: 项目名称&#xff1b;version: 版本&#xff0…

深入MapReduce——引入

引入 前面我们已经深入了HDFS的设计与实现&#xff0c;对于分布式系统也有了不错的理解。 但HDFS仅仅解决了海量数据存储和读写的问题。要想让数据产生价值&#xff0c;一定是需要从数据中挖掘出价值才行&#xff0c;这就需要我们拥有海量数据的计算处理能力。 下面我们还是…

springfox-swagger-ui 3.0.0 配置

在3.0中&#xff0c;访问地址URL变了。 http://地址:端口/项目名/swagger-ui/ SpringBoot maven项目引入 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version> </…

如何解压7z文件?8种方法(Win/Mac/手机/网页端)

7z 文件是一种高效的压缩文件格式&#xff0c;由 7 - Zip 软件开发者所采用。它运用独特的压缩算法&#xff0c;能显著缩小文件体积&#xff0c;便于存储与传输各类数据&#xff0c;像软件安装包、大型资料集等。但要使用其中内容&#xff0c;就必须解压&#xff0c;因为处于压…

Spring Boot 邂逅Netty:构建高性能网络应用的奇妙之旅

一、引言 在当今数字化时代&#xff0c;构建高效、可靠的网络应用是开发者面临的重要挑战。Spring Boot 作为一款强大的 Java 开发框架&#xff0c;以其快速开发、简洁配置和丰富的生态支持&#xff0c;深受广大开发者喜爱。而 Netty 作为高性能、异步的网络通信框架&#xff…