Redis常见阻塞原因

1、命令阻塞

使用时间复杂度O(n)的不当命令造成全表扫描,导致阻塞

如 keys * 获取所有key

2、RDB持久化save阻塞

Redis提供两个命令来生成RDB快照文件:

        1、save:主线程阻塞,写完RDB才放行

        2、bgsave : fork子线程,异步不阻塞

3、AOF日志阻塞

Redis AOF持久化是 等执行命令写内存完成后,将命令写入磁盘的日志文件

这样先执行后持久化的方式:AOF记录日志不做语法检查,可以减少额外开销

但AOF记录日志也是在主线程内执行的,因此刷盘时磁盘写压力过大可能会很慢阻塞后续操作

4、操作大KEY

bigKey:

  • string 类型的 value 超过 1MB
  • 复合类型(列表、哈希、集合、有序集合等)的 value 包含的元素超过 5000 个

操作大 key 造成的阻塞问题如下:

1、Redis单线程执行命令,操作大key时比较耗时,发生阻塞

2、获取大key网络传输流量很高,发生网络阻塞

查找大key :选择从节点查询

5、删除大 key

删除操作的本质是要释放键值对占用的内存空间。

为了高效管理内存空间,在应用程序释放内存时,操作系统需要把释放掉的内存块插入一个空闲内存块的链表,以便后续管理分配。这个过程会阻塞当前释放内存的应用程序。

如果一下子释放了大量内存,空闲内存块链表操作时间就会增加,相应地就会造成 Redis 主线程的阻塞

6、CPU竞争

Redis 是典型的 CPU 密集型应用,不建议和其他多核 CPU 密集型服务部署在一起。当其他进程过度消耗 CPU 时,将严重影响 Redis 的吞吐量。

7、网络问题

网都没了还想传输?后两个凑数有点。

相关推荐

  1. Redis常见阻塞原因

    2024-07-18 21:42:05       22 阅读
  2. Redis 产生阻塞原因,如何找到阻塞原因

    2024-07-18 21:42:05       35 阅读
  3. Redis常见原理和数据结构

    2024-07-18 21:42:05       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 21:42:05       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 21:42:05       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 21:42:05       57 阅读
  4. Python语言-面向对象

    2024-07-18 21:42:05       68 阅读

热门阅读

  1. Pandas库学习之DataFrame.replace()函数

    2024-07-18 21:42:05       21 阅读
  2. ros2--插件

    2024-07-18 21:42:05       26 阅读
  3. 探索 Flask:从入门到精通的完整学习指南

    2024-07-18 21:42:05       21 阅读
  4. antd使用踩坑记录

    2024-07-18 21:42:05       19 阅读
  5. 数组 59.螺旋矩阵Ⅱ

    2024-07-18 21:42:05       22 阅读
  6. 无人机反制:车载侦测干扰一体设备技术详解

    2024-07-18 21:42:05       21 阅读
  7. task1代码分析 #Datawhale #讯飞AI训练营

    2024-07-18 21:42:05       20 阅读
  8. lua 游戏架构 之 资源加载 LoaderManager (一)

    2024-07-18 21:42:05       18 阅读