CentOS系统下Redis性能优化指南
安装依赖与Redis
更新系统包并安装编译依赖,通过源码编译安装最新稳定版Redis(如7.2.0),以获取更好的性能优化和功能支持:
sudo yum update -y && sudo yum install -y epel-release gcc make
wget http://download.redis.io/releases/redis-7.2.0.tar.gz
tar xzf redis-7.2.0.tar.gz
cd redis-7.2.0
make && sudo make install
配置文件路径
Redis主配置文件通常位于/etc/redis.conf(若未找到,可通过redis-cli config get dir确认配置目录)。
maxmemory参数限制Redis使用的内存(如maxmemory 4gb),避免内存溢出导致服务崩溃。建议预留20%-30%的系统闲置内存,防止系统OOM Killer杀掉Redis进程。maxmemory-policy设置内存不足时的数据淘汰规则。常用策略:
volatile-lru:从设置了过期时间的键中淘汰最近最少使用的(适合有过期时间的场景);allkeys-lru:从所有键中淘汰最近最少使用的(适合无过期时间或需要全局控制的场景);volatile-ttl:淘汰剩余生存时间(TTL)最短的键(适合优先清理即将过期的数据)。save指令设置快照频率(如save 900 1表示900秒内至少1次修改则触发),适合容灾恢复。优点是备份文件小、恢复速度快;缺点是可能丢失最后一次快照后的数据。appendonly yes),并通过appendfsync设置同步频率:
everysec(默认):每秒同步一次(折中方案,兼顾性能与数据安全性,丢失1秒内的数据);always:每次写操作都同步(数据最安全,但性能下降约30%);no:由操作系统决定同步时机(性能最好,但数据风险最高)。aof-use-rdb-preamble yes开启,结合RDB的高速备份与AOF的实时性,提升恢复速度。/etc/sysctl.conf中添加以下配置,优化TCP连接性能:net.core.somaxconn = 1024 # 监听队列最大长度(默认128,需大于Redis的tcp-backlog)
net.ipv4.tcp_max_syn_backlog = 1024 # SYN队列最大长度
net.ipv4.tcp_keepalive_time = 300 # TCP keepalive时间(秒),检测死连接
执行sysctl -p使配置生效。redis.conf中设置:tcp-backlog 511 # 监听队列长度(需与somaxconn匹配)
tcp-nodelay yes # 禁用Nagle算法,减少网络延迟
timeout 300 # 空闲连接超时时间(秒),自动关闭长时间未使用的连接
bind指令指定允许访问的IP(如bind 192.168.1.100,生产环境避免0.0.0.0);设置强密码(requirepass your_strong_password),防止未授权访问。bgrewriteaof命令异步重写,压缩文件大小。可在redis.conf中设置自动触发条件:auto-aof-rewrite-percentage 100 # 当前AOF文件比上次重写后大100%时触发
auto-aof-rewrite-min-size 64mb # 触发重写的最小文件大小
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
为防止重启失效,可将上述命令添加到/etc/rc.local中。pipeline.set("key1", "value1").set("key2", "value2")),减少网络往返次数(RTT),提升吞吐量(实测吞吐量可提升2-5倍)。rename-command重命名或禁用高危命令(如FLUSHALL、KEYS),防止误操作:rename-command FLUSHALL "" # 禁用
rename-command KEYS "SAFE_KEYS" # 重命名
KEYS *会遍历整个键空间,阻塞Redis。改用SCAN命令(增量遍历),如:SCAN 0 MATCH user:* COUNT 100 # 每次返回100个匹配的键
调整文件描述符限制:Redis是单线程模型,大量并发连接需要足够的文件描述符。
ulimit -n 65535;/etc/security/limits.conf,添加:redis soft nofile 65535
redis hard nofile 65535
/etc/pam.d/login,确保包含session required pam_limits.so。CPU与内存优化:
taskset -c 0,1 redis-server /etc/redis.conf),减少CPU缓存失效,提升处理效率;--with-jemalloc编译选项强制指定。redis-cli --cluster create命令快速搭建集群,将数据分散到多个节点,提升读写性能与容错能力。INFO命令查看Redis状态(如内存使用、命中率、连接数):redis-cli info memory # 查看内存信息
redis-cli info stats # 查看统计信息(命中率、QPS等)
slowlog-log-slower-than 10000 # 微秒(10ms)
slowlog-max-len 128 # 日志长度(条数)
查看慢查询日志:redis-cli slowlog get。通过以上优化措施,可显著提升CentOS系统上Redis的性能、稳定性和可扩展性。需根据实际业务场景(如数据量、并发量、数据结构)调整参数,并在测试环境中验证效果后再应用于生产环境。