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

文章目录

  • 导读
  • 为什么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.rhkb.cn/news/5638.html

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

相关文章

国产编辑器EverEdit - 快捷目录

1 面板-快捷目录 1.1 应用场景 快捷目录提供了一个用户常用文件或文件夹的收集器,方便用户快速找到并打开需要频繁编辑的文件。 1.2 使用方法 1.2.1 打开快捷目录面板 步骤1:选择菜单“查看 -> 停靠窗格 -> 快捷目录”,即可打开快捷…

正则表达式的艺术:轻松驾驭 Python 的 re 库

目录 一、正则表达式的基本概念 二、Python 的 re 库简介 三、正则表达式的元字符 四、正则表达式的贪婪与非贪婪模式 五、实战案例 六、总结 正则表达式(Regular Expression)是文本处理中不可或缺的工具,它强大而灵活,能够…

炸场硅谷,大模型“蒸汽机”迎来“瓦特时刻”

作者 | 曾响铃 文 | 响铃说 中国大模型又在包括硅谷在内的全球AI圈炸场了。 两天前,幻方量化旗下AI公司深度求索(DeepSeek),以及月之暗面相隔20分钟相继发布了自家最新版推理模型,分别是DeepSeek-R1以及Kimi 全新多…

备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴

提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

MyBatis最佳实践:提升数据库交互效率的秘密武器

第一章:框架的概述: MyBatis 框架的概述: MyBatis 是一个优秀的基于 Java 的持久框架,内部对 JDBC 做了封装,使开发者只需要关注 SQL 语句,而不关注 JDBC 的代码,使开发变得更加的简单MyBatis 通…

1. 基于图像的三维重建

1. 基于图像的三维重建 核心概念三维重建中深度图、点云的区别?深度图点云总结 深度图到点云还需要什么步骤?1. **获取相机内参**2. **生成相应的像素坐标**3. **计算三维坐标**4. **构建点云**5. **处理颜色信息(可选)**6. **去除…

将UI界面交给第三方库

当你了解了 Vue 项目构建和开发的基本知识后,我认为接下来你一定想亲自在构建出的项目中填充自己的业务和功能逻辑,因为目前其还是空白的。 但是这里我不会教你如何实现一个具体的业务和功能模块,因为每个人想要实现的东西都可能不尽相同。如…

深圳大学-计算机系统(3)-实验三取指和指令译码设计

实验目标 设计完成一个连续取指令并进行指令译码的电路,从而掌握设计简单数据通路的基本方法。 实验内容 本实验分成三周(三次)完成:1)首先完成一个译码器(30分);2)接…

[Dialog屏幕开发] 屏幕绘制(文本/输入框/按钮控件)

阅读该篇文章之前,可先阅读下述资料 [Dialog屏幕开发] 设置GUI Status 菜单/GUI Title 标题https://blog.csdn.net/Hudas/article/details/145288453?spm1001.2014.3001.5501 上篇文章我们的屏幕已实现了如下功能 我们已经设置了GUI Status菜单以及GUI Title标题…

如何通过海外社交媒体平台提升品牌曝光度?

跨境电商和全球营销策略的核心之一是通过海外社交媒体平台提升品牌曝光度。为了实现这一目标,企业需要选定适合的社交平台并制定精准的营销策略。结合OKBrow指纹指纹浏览器的强大功能,您能够高效管理多个社交账户,避免平台识别账户之间的关联…

可替代CentOS 7的Linux操作系统选型

可替代CentOS 7的其他Linux操作系统选型 一、背景介绍二、主流操作系统调研2.1 企业级产品:Red Hat Enterprise Linux/CentOS Stream2.1.1 Red Hat Enterprise Linux2.1.2 CentOS Stream2.2 其他发行版:Debian/Ubuntu2.3 开源产品:AlmaLinux / RockyLinux2.3.1 AlmaLinux2.3…

每日一题洛谷P1423 小玉在游泳c++

#include<iostream> using namespace std; int main() {double s;cin >> s;int n 0;double sum 0;double k 2;while (sum < s) {sum k;n;k * 0.98;}cout << n << endl;return 0; }

DRG_DIP 2.0时代医院程序结构转型与数据结构优化研究

一、引言 1.1 DRG_DIP 2.0 改革背景与意义 医保支付方式改革在医疗保障制度改革中占据着极为关键的地位&#xff0c;是推动医疗领域变革的核心力量。它犹如一把精准的手术刀&#xff0c;对医疗资源的合理分配、医疗服务质量的稳步提升以及医疗费用的有效控制起着决定性作用。…

Redis支持数据类型详解

4 数据类型 Redis支持多种数据类型&#xff1a;string&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xff08;列表&#xff09;&#xff0c;set&#xff08;集合&#xff09;、zset&#xff08;sorted set 有序集合&#x…

游戏设备升级怎么选?RTX4070独显,ToDesk云电脑更具性价比

过新年、添喜气&#xff01;正逢节期来临不知道各位是否都跟小编一样在考虑购置生活中的各样所需呐&#xff1f; 25年可谓是3A游戏大作之年&#xff0c;例如《GTA6》《文明7》《死亡搁浅2》《刺客信条&#xff1a;影》下半年落地的《塞尔达传说&#xff1a;新篇章》《生化危机9…

网络安全解决方案分享:推荐十款网络准入控制系统,保护企业网络安全

随着企业信息化进程的不断推进&#xff0c;企业网络安全面临的威胁愈加复杂。网络准入控制&#xff08;NAC, Network Access Control&#xff09;系统作为保障企业网络安全的核心技术&#xff0c;无论是防止外部攻击、阻止内部滥用&#xff0c;还是确保设备符合合规要求&#x…

WebSocket实现私聊私信功能

目录 后端pom.xmlConfig配置类Controller类DTO 前端安装相关依赖websocketService.js接口javascripthtmlCSS 效果展示简单测试连接&#xff1a; 报错解决方法1、vue3 使用SockJS报错 ReferenceError: global is not defined 后面将继续完善&#xff0c;待更新... 后端 pom.xml…

【PHP】部署和发布PHP网站到IIS服务器

欢迎来到《小5讲堂》 这是《PHP》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言安装PHP 稳定版本线程安全版解压使用 PHP配置 配置文件扩展文件…

电梯系统的UML文档07

从这个类中得到的类图&#xff0c;构划出了软件的大部分设计。 系统结构视图提供软件和整个系统结构最复杂的也是最优雅的描述。和通常的软件系统相比&#xff0c;在分布式嵌入系统中了解系统组件如何协同工作是非常重要的。毕竟&#xff0c;每个类图仅仅是一个系统的静态设计…

低代码系统-产品架构案例介绍、明道云(七)

今天分析另外一个零代码、低代码产品-明道云&#xff0c;跟所有低代码产品的架构图一样&#xff0c;高、大、炫、美。 依然是从下至上&#xff0c;从左到右的顺序。 开发层 搭建中心 表单、流程、报表、用户中心&#xff0c;还是这些内容&#xff0c;自定义打印很多平台都有&am…