Redis被广泛使用的一个很重要的原因是它的高性能。因此我们必要要重视所有可能影响Redis性能的因素、机制以及应对方案。影响Redis性能的五大方面的潜在因素,分别是:
- Redis内部的阻塞式操作
- CPU核和NUMA架构的影响
- Redis关键系统配置
- Redis内存碎片
- Redis缓冲区
本篇文章我们主要了解Redis内部的阻塞式操作以及应对方法。
Redis实例有哪些阻塞点
在分析阻塞点前,我们先来看看和Redis实例交互的对象和操作有哪些:
- 客户端:网络IO,键值对增删改查操作,数据库操作;
- 磁盘:生成RDB快照,记录AOF日志,AOF日志重写;
- 主从节点:主库生成、传输RDB文件,从库接收RDB文件、清空数据库、加载RDB文件;
- 切片集群实例:向其他实例传输哈希槽信息,数据迁移。
这些交互操作可能会产生潜在的阻塞点。
阻塞点
- 集合全量查询和聚合操作:要重视复杂度为O(n)的操作。
- bigkey删除:删除操作的本质是要释放键值对占用的内存空间,一下子释放了大量内存,会造成Redis主线程的阻塞。
- 清空数据库:频繁删除键值对是潜在风险,清空数据库必然也是一个潜在风险。
- AOF日志同步写:一个同步写磁盘的操作的耗时大约