Redis单线程处理IO请求性能瓶颈

Redis单线程处理IO请求性能瓶颈主要包括2个⽅⾯:

1、任意⼀个请求在server中⼀旦发⽣耗时,都会影响整个server的性能,也就是说后⾯的请 求都要等前⾯这个耗时请求处理完成,⾃⼰才能被处理到。耗时的操作包括以下⼏种:
a、操作bigkey:写⼊⼀个bigkey在分配内存时需要消耗更多的时间,同样,删除bigkey释放 内存同样会产⽣耗时;
b、使⽤复杂度过⾼的命令:例如SORT/SUNION/ZUNIONSTORE,或者O(N)命令,但是N 很⼤,例如lrange key 0 -1⼀次查询全量数据;
c、⼤量key集中过期:Redis的过期机制也是在主线程中执⾏的,⼤量key集中过期会导致处 理⼀个请求时,耗时都在删除过期key,耗时变⻓;
d、淘汰策略:淘汰策略也是在主线程执⾏的,当内存超过Redis内存上限后,每次写⼊都需 要淘汰⼀些key,也会造成耗时变⻓;
e、AOF刷盘开启always机制:每次写⼊都需要把这个操作刷到磁盘,写磁盘的速度远⽐写内
存慢,会拖慢Redis的性能;
f、主从全量同步⽣成RDB:虽然采⽤fork⼦进程⽣成数据快照,但fork这⼀瞬间也是会阻塞 整个线程的,实例越⼤,阻塞时间越久;

2、并发量⾮常⼤时,单线程读写客户端IO数据存在性能瓶颈,虽然采⽤IO多路复⽤机制,但 是读写客户端数据依旧是同步IO,只能单线程依次读取客户端的数据,⽆法利⽤到CPU多 核。针对问题1,⼀⽅⾯需要业务⼈员去规避,⼀⽅⾯Redis在4.0推出了lazy-free机制,把bigkey 释放内存的耗时操作放在了异步线程中执⾏,降低对主线程的影响。 精选留⾔ 91
针对问题2,Redis在6.0推出了多线程,可以在⾼并发场景下利⽤CPU多核多线程读写客户端
数据,进⼀步提升server性能,当然,只是针对客户端的读写是并⾏的,每个命令的真正操
作依旧是单线程的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值