0.前言
Redis 是一种基于内存的数据存储系统,因此内存的规划是非常重要的。在配置 Redis 内存时,应该避免物理内存使用过量导致大量使用 Swap,同时需要考虑内存碎片的问题。以下是一些建议:
1.内存优化
1.1. 设置最大内存 maxmemory 参数
这个参数指的是 Redis 在使用过程中所占用的最大内存,应该根据实际情况进行设置。如果不设置,当内存使用超过物理内存时,Redis 会大量使用 Swap,导致写 RDB 文件的速度变得非常慢。同时,当内存碎片过多时,也会影响 Redis 的性能。一般建议留下 55% 的内存作为安全边界。
1.2. 留意 Console 打出来的报告
在 Redis 启动时,应该关注控制台打出来的报告,例如 "RDB: 1215 MB of memory used by copy-on-write"。如果在系统极度繁忙时,父进程的所有 Page 在子进程写 RDB 过程中都被修改过,就需要两倍内存。
1.3. 考虑内存碎片问题
当 Redis 内存碎片过多时,可以采用一些措施来缓解问题,例如使用 jemalloc 内存分配器、使用 Redis 的内存压缩等。
1.4. 关闭 THP
Linux 默认的内存页面大小分配策略会导致 RDB 时出现巨大的 latency 和巨大的内存占用。关闭 THP 的方法为:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
2. CPU 优化
2.1. CPU 主频高、Cache 大
由于 Redis 主要处理模式是单进程的,因此 CPU 主频高、Cache 大的处理器更适合用于 Redis。在购买服务器时,应该考虑选择配置较高的 CPU。
2.2. 避免使用虚拟机
此建议只是理论情况,要结合企业自身基础设施投入。理论上由于虚拟机会影响 CPU 性能,因此在使用 Redis 时,应该尽量避免使用虚拟机。
3.根据业务情况按需分配
最好能估算出业务峰值的2倍内存,内存和 CPU 的规划应该根据实际情况进行调整。如果 Redis 的工作负载发生变化,可能需要重新调整内存和 CPU 的规划。