本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于redis变慢的原因及排查方法的相关问题,下面一起来看一下,希望对大家有帮助。

推荐学习:Redis视频教程
排查思路
如果你的 Redis 实例设置了内存上限 maxmemory,那么也有可能导致 Redis 变慢。
当我们把 Redis 当做纯缓存使用时,通常会给这个实例设置一个内存上限 maxmemory,然后设置一个数据淘汰策略。而当实例的内存达到了 maxmemory 后,你可能会发现,在此之后每次写入新数据,操作延迟变大了。
导致变慢的原因
当 Redis 内存达到 maxmemory 后,每次写入新的数据之前,Redis 必须先从实例中踢出一部分数据,让整个实例的内存维持在 maxmemory 之下,然后才能把新数据写进来。
这个踢出旧数据的逻辑也是需要消耗时间的,而具体耗时的长短,要取决于你配置的淘汰策略:
具体使用哪种策略,我们需要根据具体的业务场景来配置。一般最常使用的是 allkeys-lru / volatile-lru 淘汰策略,它们的处理逻辑是,每次从实例中随机取出一批 key(这个数量可配置),然后淘汰一个最少访问的 key,之后把剩下的 key 暂存到一个池子中,继续随机取一批 key,并与之前池子中的 key 比较,再淘汰一个最少访问的 key。以此往复,直到实例内存降到 maxmemory 之下。
需要注意的是,Redis 的淘汰数据的逻辑与删除过期 key 的一样,也是在命令真正执行之前执行的,也就是说它也会增加我们操作 Redis 的延迟,而且,写 OPS 越高,延迟也会越明显。

另外,如果此时你的 Redis 实例中还存储了 bigkey,那么在淘汰删除 bigkey 释放内存时,也会耗时比较久。
看到了么?bigkey 的危害到处都是,这也是前面我提醒你尽量不存储 bigkey 的原因。
解决方案
排查思路
导致变慢的原因

解决方案
关闭内存大页机制。
首先,你需要查看 Redis 机器是否开启了内存大页:
$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
如果输出选项是 always,就表示目前开启了内存大页机制,我们需要关掉它:
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
其实,操作系统提供的内存大页机制,其优势是,可以在一定程序上降低应用程序申请内存的次数。
但是对于 Redis 这种对性能和延迟极其敏感的数据库来说,我们希望 Redis 在每次申请内存时,耗时尽量短,所以我不建议你在 Redis 机器上开启这个机制。
排查思路
如果你发现 Redis 突然变得非常慢,每次的操作耗时都达到了几百毫秒甚至秒级,那此时你就需要检查 Redis 是否使用到了 Swap,在这种情况下 Redis 基本上已经无法提供高性能的服务了。
导致变慢的原因
什么是 Swap?为什么使用 Swap 会导致 Redis 的性能下降?
如果你对操作系统有些了解,就会知道操作系统为了缓解内存不足对应用程序的影响,允许把一部分内存中的数据换到磁盘上,以达到应用程序对内存使用的缓冲,这些内存数据被换到磁盘上的区域,就是 Swap。
问题就在于,当内存中的数据被换到磁盘上后,Redis 再访问这些数据时,就需要从磁盘上读取,访问磁盘的速度要比访问内存慢几百倍!尤其是针对 Redis 这种对性能要求极高、性能极其敏感的数据库来说,这个操作延时是无法接受的。
此时,你需要检查 Redis 机器的内存使用情况,确认是否存在使用了 Swap。你可以通过以下方式来查看 Redis 进程是否使用到了 Swap:
一览妙笔
自媒体、编剧、营销人员写作工具
50
查看详情
# 先找到 Redis 的进程 ID $ ps -aux | grep redis-server # 查看 Redis Swap 使用情况 $ cat /proc/$pid/smaps | egrep '^(Swap|Size)'
输出结果如下
Size: 1256 kB Swap: 0 kB Size: 4 kB Swap: 0 kB Size: 132 kB Swap: 0 kB Size: 63488 kB Swap: 0 kB Size: 132 kB Swap: 0 kB Size: 65404 kB Swap: 0 kB Size: 1921024 kB Swap: 0 kB ...
这个结果会列出 Redis 进程的内存使用情况。
每一行 Size 表示 Redis 所用的一块内存大小,Size 下面的 Swap 就表示这块 Size 大小的内存,有多少数据已经被换到磁盘上了,如果这两个值相等,说明这块内存的数据都已经完全被换到磁盘上了。
如果只是少量数据被换到磁盘上,例如每一块 Swap 占对应 Size 的比例很小,那影响并不是很大。如果是几百兆甚至上 GB 的内存被换到了磁盘上,那么你就需要警惕了,这种情况 Redis 的性能肯定会急剧下降。
解决方案
释放 Redis 的 Swap 过程通常要重启实例,为了避免重启实例对业务的影响,一般会先进行主从切换,然后释放旧主节点的 Swap,重启旧主节点实例,待从库数据同步完成后,再进行主从切换即可。
可见,当 Redis 使用到 Swap 后,此时的 Redis 性能基本已达不到高性能的要求(你可以理解为武功被废),所以你也需要提前预防这种情况。
预防的办法就是,你需要对 Redis 机器的内存和 Swap 使用情况进行监控,在内存不足或使用到 Swap 时报警出来,及时处理。
排查思路
如果以上产生性能问题的场景,你都规避掉了,而且 Redis 也稳定运行了很长时间,但在某个时间点之后开始,操作 Redis 突然开始变慢了,而且一直持续下去,这种情况又是什么原因导致?
此时你需要排查一下 Redis 机器的网络带宽是否过载,是否存在某个实例把整个机器的网路带宽占满的情况。
导致变慢的原因
网络带宽过载的情况下,服务器在 TCP 层和网络层就会出现数据包发送延迟、丢包等情况。
Redis 的高性能,除了操作内存之外,就在于网络 IO 了,如果网络 IO 存在瓶颈,那么也会严重影响 Redis 的性能。
解决方案
1) 频繁短连接
你的业务应用,应该使用长连接操作 Redis,避免频繁的短连接。
频繁的短连接会导致 Redis 大量时间耗费在连接的建立和释放上,TCP 的三次握手和四次挥手同样也会增加访问延迟。
2) 运维监控
前面我也提到了,要想提前预知 Redis 变慢的情况发生,必不可少的就是做好完善的监控。
监控其实就是对采集 Redis 的各项运行时指标,通常的做法是监控程序定时采集 Redis 的 INFO 信息,然后根据 INFO 信息中的状态数据做数据展示和报警。
这里我需要提醒你的是,在写一些监控脚本,或使用开源的监控组件时,也不能掉以轻心。
在写监控脚本访问 Redis 时,尽量采用长连接的方式采集状态信息,避免频繁短连接。同时,你还要注意控制访问 Redis 的频率,避免影响到业务请求。
在使用一些开源的监控组件时,最好了解一下这些组件的实现原理,以及正确配置这些组件,防止出现监控组件发生 Bug,导致短时大量操作 Redis,影响 Redis 性能的情况发生。
我们当时就发生过,DBA 在使用一些开源组件时,因为配置和使用问题,导致监控程序频繁地与 Redis 建立和断开连接,导致 Redis 响应变慢。
3)其它程序争抢资源
最后需要提醒你的是,你的 Redis 机器最好专项专用,只用来部署 Redis 实例,不要部署其他应用程序,尽量给 Redis 提供一个相对「安静」的环境,避免其它程序占用 CPU、内存、磁盘资源,导致分配给 Redis 的资源不足而受到影响。
推荐学习:Redis视频教程
以上就是一起聊聊Redis变慢的原因及排查方法的详细内容,更多请关注其它相关文章!
# 高性能
# seo搜索引擎原理
# 西苑门户网站建设
# seo免费线路2线路3
# 孟州seo快速排名
# 一站式营销推广怎么做
# 春哥seo官方
# 杭州抖音seo厂家
# 宁夏网站建设费用
# 建设网站有什么流程
# 网站要怎么优化到首页上
# redis
# 重启
# 这种情况
# 这块
# 网络带宽
# 操作系统
# 应用程序
# 也会
# 变慢
# 的是
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
铁路12306入口 铁路12306官网版入口登录网址
《edge浏览器》关闭翻译功能方法
LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用
支付宝如何解绑云闪付_支付宝与云闪付账户关联解除方法
店铺如何做视频号推广?做视频号推广有用吗?
漫蛙漫画官方版直通入口 2025漫蛙漫画免注册访问说明
Apple Music无故扣费引质疑
获取WooCommerce产品在后台编辑页面的分类ID
《单词速记宝》设置学习计划方法
空腹吃苹果好吗 苹果空腹摄入指南
抖音号怎么解除企业认证改成个人?改成个人有影响吗?
微信客户端怎么查看二维码_微信客户端个人二维码查看方法
Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置
智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析
Golang如何操作指针参数_Go pointer参数传递规则
《全民k歌》音乐怎么下载到本地2025
J*aScript桌面应用_Electron多进程架构实战
照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程
Retrofit根路径POST请求:@POST("/") 的应用与解析
PHP与SQL实践:高效实现数据复制与特定列值修改
《东方航空》添加乘机人方法
金牛福袋获取攻略
Composer reinstall命令重装损坏的包
优化响应式标题底部边框:CSS实现技巧与最佳实践
firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接
优化CSS动画与J*aScript定时器协同:构建稳定Toast提示
我的世界官方网址入口 我的世界游戏主页直达入口
太平年在哪个平台播出
优化 React onClick 事件处理:函数引用与箭头函数的对比
QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航
mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法
PHP utf8_encode 字符编码转换陷阱与解决方案
《星露谷物语》克林特好感度事件介绍
ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算
青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法
Django模型动态关联检查:高效管理复杂关系
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
动漫岛汉化官网网 动漫岛官方动漫汉化地址
《i莞家》修改昵称方法
CSS如何控制元素外边距_margin实现布局间隔
追剧达人如何发弹幕
《波斯王子:失落的王冠》剑术大师打法攻略
漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口
创建您的便携版VS Code:让配置随身携带
百度识图图像分析 百度识图识别平台
个人所得税办理入口 个人所得税综合所得年度汇算入口
KFC邀请码怎么使用领额外优惠_KFC邀请码输入方式与额外优惠代码获取方法
cad视图选项卡不见了怎么办_cad视图标签恢复显示方法
163邮箱网页版入口 163邮箱在线使用
电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】
2022-06-10
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。