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释放内存的耗时操作放在了异步线程中执行,降低对主线程的影响。

针对问题2,Redis在6.0推出了多线程,可以在高并发场景下利用CPU多核多线程读写客户端数据,进一步提升server性能,当然,只是针对客户端的读写是并行的,每个命令的真正操作依旧是单线程的。

Redis单线程瓶颈分析相关推荐

  1. 6.Redis单线程为什么这么快?

    线程模型 大家都知道,Redis是单线程的,为什么采用单线程的Redis也会如此之快呢?接下来我们分析其中缘由. 严格来说, Redis Server是多线程的, 只是它的请求处理整个流程是单线程处理 ...

  2. redis单线程为什么效率很高

    转自:https://blog.csdn.net/u010870518/article/details/79470556 一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么 ...

  3. 你真的了解Redis单线程为什么如此之快吗?

    一.概述 Redis的高并发和快简单可以归结为一下几点: 1.Redis是基于内存的: 2.Redis是单线程的: 3.Redis使用多路复用技术. 4.高效的数据结构 但具体怎么做的呢,下面来详细看 ...

  4. Redis 性能问题分析(好文推荐)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者: 刘思宁 整理:朱小厮 www.jianshu.com/p/ ...

  5. 硬货 | Redis 性能问题分析

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:rrd.me/gteAC 在一些网络服务的系统中,Redis ...

  6. Redis源码分析:基础概念介绍与启动概述

    Redis源码分析 基于Redis-5.0.4版本,进行基础的源码分析,主要就是分析一些平常使用过程中的内容.仅作为相关内容的学习记录,有关Redis源码学习阅读比较广泛的便是<Redis设计与 ...

  7. redis源码分析(beta版本)-redis实现的概述逻辑

    redis概述 redis作为一个高性能的kv数据库,基于c语言实现,数据主要基于内存存放,所以查询效率较高,并且支持较多的数据类型有字符串.字典.列表与集合等数据结构.另外redis叶支持持久化的日 ...

  8. redis为什么是单线程_面试官:Redis单线程为什么执行效率这么高?

    点击上方☝Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇回顾: 面试官:Redis为什么设计成单线程的 ...

  9. Redis 性能问题分析

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 刘思宁 来源 | jianshu.com/p/ ...

最新文章

  1. andoridView修改
  2. Axure--Web原型开发工具
  3. 大数据凉了?No,流式计算浪潮才刚刚开始!
  4. P1217 回文质数(打表)
  5. QT的QXmlDefaultHandler类的使用
  6. Python学习11 继承
  7. php对某目录设置ip权限,apache - .htaccess如何单独给某个请求设置IP白名单权限?...
  8. ADI公司完成对凌力尔特公司的收购
  9. ubuntu 开发环境的配置 (转)
  10. Maya2020入门:标题栏+菜单栏+状态栏
  11. 点菜系统软件源码(点菜软件源码分享)
  12. ENSP配置 实例六 OSPF配置
  13. [原创]分布光纤测温DTS产品在市场上两种主流产品架构的区别与对比-未来趋势必然向单板化方向发展
  14. 电脑wifi密码查看
  15. 我只是一只大本钟[铛铛铛]
  16. DIS全球首款基于数字资产证券化交易生态系统
  17. 源码编译更新nginx到最新版本,并开始nginx支持http2协议模块.
  18. 微信点餐系统中出现的小问题记录
  19. 手把手教你搭建惊艳的博客
  20. 如何将html转移安卓手机,怎样设置呼叫转移,教您安卓手机如何设置呼叫转移

热门文章

  1. uniapp 封装storage缓存
  2. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚
  3. ImportError: libopencv_imgcodecs.so.4.3: cannot open shared object file: No such file or directory报错
  4. gitee教程(超全,超详细,超长)
  5. 自己总结的wireshark抓包技巧
  6. win系统C++的udp通信(接收并发送)详细教程、win下inet_pton和inet_ntop无法使用解决方法
  7. kal8linux密码,KAL1 LINUX 官方文档之arm上的ka1i---树莓派全盘加密
  8. STC51从入门到精通(汇编)~~~ 第一讲:概述
  9. 国内外云服务现状及发展探讨
  10. Android Studio 制作微信界面 上