1. Redis 的主工作线程为单线程,因此主机的 CPU 主频率对 Redis 性能影响非常大,所以有时候我们能看到下面奇怪的现象:CPU 核数多的主 机跑出的性能 2. Redis 6.x 后,虽然能够开启多线程,但我们知道 Redis 的主工作线程仍然是单线程 3. 同时我们可以尝试对 Redis 进行 CPU 绑定,降低 CPU 和内存之间的交互时间 1. 采用 CPU 频率高的主机 2. 尝试对 Redis 进行 CPU 绑定 性能建议: 1. 如果是热点场景,建议大家关闭 rdb 和 aof 2. 在 SATA 和 SAS 普通盘上,appendfsync=always 和 appendfsync=everysec 性能差异基本在 50 倍以上 3. 在 aof 开启而且刷盘方式 appendfsync=always 时,磁盘对 Redis 的写入性能影响非常大,通常我们只在 SSD 时才尝试开启 4. 如果主机 IO 非常繁忙,appendfsync=everysec 在极限情况下可能导致 Redis 主线程堵塞 5. 尝试关闭重写时写 AOF 文件,no-appendfsync-on-rewrite yes,但安全性会变低 性能建议: 1. 在普通的网络中,每增加一层交换机/路由器,网络延迟时间约在 2ms 左右,所以 Redis 和应用程序之间不要跨多个交换机/路由器 2. Redis 和应用程序在网局域网时性能较高,最好是同交换机下部署,性能最佳 3. 网络上的防火墙以及转发机器,也会对网络造成较大影响,建议采用直通网络模式 4. Redis 和应用程序之间的延迟时间如果超过了 2ms,建议从网络优化方面考虑 操作系统为了缓解内存不足对应用程序的影响,允许把一部分内存中的数据换到磁盘上,以达到应用程序对内存使用的缓冲,这些内存数据被 换到磁盘上的区域,就是 Swap Redis 的主要操作对象为内存,强烈不建议大家使用 Swap;当内存中的数据被换到磁盘上后,Redis 再访问这些数据时,就需要从磁盘上读取, 访问磁盘的速度要比访问内存 50 倍以上,尤其在非 ssd 盘上,甚至在几百倍以上 查看 Redis 是否使用了 Swap,其中 pid 为 Redis 进程号 1. 增加物理内存、关闭 Swap 内存,这是最简单也是最直接的方式 2. 减小使用 Swap 内存阈值,比如如: vm.swappiness = 5 vm.min_free_kbytes=204800性能建议:
磁盘
网络
SWAP
cat /proc/${pid}/smaps | egrep '^(Swap|Size)'
性能建议: