Redis 中的优秀设计有很多,今天我们一起来聊聊群友刷题遇到的:“Redis的异步机制 —— redis有哪些阻塞点以及如何解决?”
前言
说到 Redis,大家自然而然的会想到基于内存、单线程执行等。话说回来,Redis 真的只有单线程吗?这篇文章来说说 Redis 的异步机制。
有哪些影响redis性能的因素
我们从 Redis 内部及外部因素总结一下,主要有:
-
redis 内部的阻塞式操作
-
CPU 核和 NUMA 架构的影响
-
Redis 关键系统配置
-
Redis 内存碎片
-
Redis 缓冲区
首先说说 Redis 实例的阻塞点:
-
客户端:网络 IO,键值对的增删改查操作,数据库操作;
-
磁盘:生成 RDB 快照,记录 AOF 日志,AOF 日志重写;
-
主从节点:主库生成、传输 RDB 文件,从库接收 RDB 文件、清空数据库、加载 RDB 文件;
-
切片集群实例:向其他实例传输哈希槽信息,数据迁移。
客户端的阻塞
因 Redis 使用了 IO 多路复用机制,能避免主线程一直处于等待状态,网络 IO 不是导致 Redis