CentOS环境下Redis配置性能调优技巧
maxmemory限制:通过maxmemory参数明确Redis可使用的内存上限(如maxmemory 4gb),防止内存溢出导致性能骤降或进程被系统终止。需根据服务器物理内存及业务需求预留20%-30%的闲置内存。maxmemory-policy参数,推荐使用allkeys-lru(淘汰所有键中最近最少使用的键)或volatile-lru(仅淘汰设置了过期时间的键),平衡内存利用率与数据重要性。避免使用noeviction(默认,不淘汰数据)导致内存耗尽。unlink命令,可将大key的删除操作放到后台线程执行,避免阻塞主线程。对于大key(如超过10KB),优先使用unlink替代del。save指令设置合理的快照频率(如save 900 1表示900秒内至少1个key变化则触发),兼顾数据恢复速度与性能。若对数据安全性要求极高,可保留但调整频率;若允许少量数据丢失,可减少快照次数。appendonly yes,并将appendfsync设置为everysec(每秒同步一次),兼顾数据安全性与写入性能。避免使用always(每次写入都同步)导致高IO负载。auto-aof-rewrite-percentage 100(当AOF文件大小增长100%时触发)和auto-aof-rewrite-min-size 64mb(文件大小至少64MB才触发),定期压缩AOF文件,减少磁盘占用和恢复时间。tcp-backlog(监听队列长度)至511或更高(如tcp-backlog 511),应对高并发连接请求,避免连接被拒绝。tcp-keepalive(如tcp-keepalive 300),设置TCP保活机制,及时清理无效连接,释放系统资源。ulimit -n 65535临时调整,或在/etc/security/limits.conf中添加redis soft nofile 65535和redis hard nofile 65535永久生效,确保Redis能处理大量并发连接。Hash存储对象(避免多个String键的冗余),用Bitmaps存储布尔值(节省内存),用HyperLogLog统计UV(基数统计)。rename-command指令重命名高风险命令(如FLUSHDB改为safe_flushdb、FLUSHALL改为safe_flushall),防止误操作导致数据丢失。对于不需要的外部访问,禁用CONFIG、EVAL等命令。sysctl.conf参数:编辑/etc/sysctl.conf,添加以下配置并执行sysctl -p生效:
net.core.somaxconn 4096:增大TCP连接队列的最大长度,避免高并发下连接排队溢出;net.ipv4.tcp_max_syn_backlog 4096:增大SYN队列长度,提升TCP连接建立效率;vm.overcommit_memory 1:允许系统超额分配内存,减少Redis因内存分配失败而阻塞的概率。/etc/security/limits.conf中添加* soft nofile 65535和* hard nofile 65535,提升系统整体文件描述符上限,避免Redis因文件描述符不足而无法接受新连接。GET命令合并为1次Pipeline请求),显著提升批量操作性能(可提升5-10倍吞吐量)。EVAL命令执行,减少网络延迟并保证操作的原子性。slowlog-log-slower-than 10000(单位:微秒,即10毫秒)和slowlog-max-len 128,记录执行时间超过阈值的慢查询命令。通过redis-cli SLOWLOG GET命令定期分析慢查询,优化慢命令(如将KEYS *替换为SCAN,避免阻塞主线程)。