Redis突然变慢,有哪些原因?

news/2024/11/27 19:45:36/

目录

一、存在bigkey

二、如果Redis 实例设置了内存上限 maxmemory,有可能导致 Redis 变慢

三、开启了内存大页

四、使用了Swap

五、网络带宽过载

六、频繁短连接


一、存在bigkey

如果Redis实例中存储了 bigkey,那么在淘汰删除 bigkey 释放内存时,也会耗时比较久。应该避免存储 bigkey,降低释放内存的耗时。

二、如果Redis 实例设置了内存上限 maxmemory,有可能导致 Redis 变慢

当 Redis 内存达到 maxmemory 后,每次写入新的数据之前,Redis 必须先从实例中踢出一部分数据,让整个实例的内存维持在 maxmemory 之下,然后才能把新数据写进来。

三、开启了内存大页

当 Redis 在执行后台 RDB 和 AOF rewrite 时,采用 fork 子进程的方式来处理。但主进程 fork 子进程后,此时的主进程依旧是可以接收写请求的,而进来的写请求,会采用 Copy On Write(写时复制)的方式操作内存数据。

什么是写时复制?

这样做的好处是,父进程有任何写操作,并不会影响子进程的数据持久化。

不过,主进程在拷贝内存数据时,会涉及到新内存的申请,如果此时操作系统开启了内存大页,那么在此期间,客户端即便只修改 10B 的数据,Redis 在申请内存时也会以 2MB 为单位向操作系统申请,申请内存的耗时变长,进而导致每个写请求的延迟增加,影响到 Redis 性能。

解决方案就是关闭内存大页机制。

四、使用了Swap

操作系统为了缓解内存不足对应用程序的影响,允许把一部分内存中的数据换到磁盘上,以达到应用程序对内存使用的缓冲,这些内存数据被换到磁盘上的区域,就是 Swap。当内存中的数据被换到磁盘上后,Redis 再访问这些数据时,就需要从磁盘上读取,访问磁盘的速度要比访问内存慢几百倍。尤其是针对 Redis 这种对性能要求极高、性能极其敏感的数据库来说,这个操作延时是无法接受的。

解决方案:增加机器的内存,让 Redis 有足够的内存可以使用。或者整理内存空间,释放出足够的内存供 Redis 使用

五、网络带宽过载

网络带宽过载的情况下,服务器在 TCP 层和网络层就会出现数据包发送延迟、丢包等情况。Redis 的高性能,除了操作内存之外,就在于网络 IO 了,如果网络 IO 存在瓶颈,那么也会严重影响 Redis 的性能。

解决方案:

1、及时确认占满网络带宽 Redis 实例,如果属于正常的业务访问,那就需要及时扩容或迁移实例了,避免因为这个实例流量过大,影响这个机器的其他实例。

2、运维层面,需要对 Redis 机器的各项指标增加监控,包括网络流量,在网络流量达到一定阈值时提前报警,及时确认和扩容。

六、频繁短连接

频繁的短连接会导致 Redis 大量时间耗费在连接的建立和释放上,TCP 的三次握手和四次挥手同样也会增加访问延迟。

解决方案:应用应该使用长连接操作 Redis,避免频繁的短连接。


http://www.ppmy.cn/news/1550425.html

相关文章

pip安装github上的开源软件包

1、若本机中安装的有git,可使用githttps方式安装 # 以安装pyfolio软件包为例,安装指令如下 pip install githttps://github.com/quantopian/pyfolio.git 2、若本机中没有安装git,可以直接使用软件包的zip地址进行安装 # 以安装pyfolio软件包为例,安装…

Vue前端开发2.3.6 列表渲染指令

在Vue.js中,v-for指令是渲染列表的关键工具,支持从数组、对象、数字和字符串中生成列表。它简化了商品列表等重复元素的创建。为了优化性能,key属性为每个列表项提供唯一标识,帮助Vue追踪节点身份,实现元素重用。实战中…

03系统设计之商业业务平台(D1_学习前言)

分享一些优秀的业务平台演化和设计。 【电商交易】京东-亿级商品详情页设计 商品详情页是展示商品详细信息的一个页面,承载在网站的大部分流量和订单的入口。京东商城目前有通用版、全球购、闪购、易车、惠买车、服装、拼购、今日抄底等许多套模板。各套模板的元数…

HIT 人工智能导论实验 知识表示

猴子摘香蕉问题 Code DFS, Python class MBP:def __init__(self, posMon, posBan, posBox, isOnBox False, isGeBan False):self.posMon, self.posBan, self.posBox, self.isOnBox, self.isGeBan posMon, posBan, posBox, isOnBox, isGeBandef isilLegal(self):return se…

241123_基于MindSpore学习Bert

241123_基于MindSpore学习Bert bert和transformer都有Embedding操作,包括词嵌入(word embedding)和位置嵌入(positional embedding) 但是transformer中的位置信息是三角函数 bert中的位置信息是可学习的,并增加了用于区分不同句…

seata 各个微服务回滚的时机

在Seata中,当你在服务方法上使用GlobalTransactional注解时,Seata会为该全局事务创建一个事务上下文,并在远程服务调用时传递这个事务上下文。Seata客户端会拦截你的Feign调用,并在调用前后进行额外的处理。 以下是Seata如何知道…

动态规划之背包问题

0/1背包问题 1.二维数组解法 题目描述:有一个容量为m的背包,还有n个物品,他们的重量分别为w1、w2、w3.....wn,他们的价值分别为v1、v2、v3......vn。每个物品只能使用一次,求可以放进背包物品的最大价值。 输入样例…

Linux—进程概念学习-03

目录 Linux—进程学习—31.进程优先级1.1Linux中的进程优先级1.2修改进程优先级—top 2.进程的其他概念3.进程切换4.环境变量4.0环境变量的理解4.1环境变量的基本概念4.2添加环境变量—export4.3Linux中环境变量的由来4.4常见环境变量4.5和环境变量相关的命令4.6通过系统调用获…