Linux环境下Redis性能调优的配置方法
maxmemory:根据服务器内存容量配置Redis最大可用内存(建议预留20%-30%给系统和其他进程),防止内存溢出导致服务崩溃。例如,8GB内存服务器可设置maxmemory 6gb。maxmemory时,通过淘汰策略自动清理不常用数据。推荐allkeys-lru(对所有key使用LRU算法,适用于大多数场景)或volatile-lru(仅对设置了过期时间的key使用LRU,适用于有明确过期时间的业务)。Hash存储用户信息(替代多个String key),减少内存占用;启用小集合压缩(hash-max-ziplist-entries 64、hash-max-ziplist-value 512),当Hash元素≤64且value≤512字节时,使用ziplist编码节省内存。save指令调整快照频率(如save 900 1表示900秒内至少1次修改则触发),避免过于频繁的快照影响性能;开启rdbcompression yes(压缩RDB文件,减少磁盘空间占用)和rdbchecksum yes(校验RDB文件完整性)。appendonly yes启用AOF(记录所有写操作,数据安全性更高);设置appendfsync everysec(折衷方案,每秒同步一次,兼顾性能与数据丢失风险);配置auto-aof-rewrite-percentage 100(AOF文件增长100%时重写)和auto-aof-rewrite-min-size 64mb(AOF文件≥64MB时重写),减小文件大小。tcp-backlog:增加TCP连接队列长度(如tcp-backlog 511),应对高并发场景下的连接请求,避免因队列满导致连接拒绝。timeout:配置空闲连接超时时间(如timeout 300,单位:秒),自动关闭长时间未活动的连接,释放资源。tcp-keepalive:设置TCP保活间隔(如tcp-keepalive 60,单位:秒),检测死连接并及时关闭,避免资源浪费。maxclients:根据服务器资源调整最大客户端连接数(如maxclients 10000),防止连接数过多导致Redis无法处理新请求。ulimit -n 100000临时设置,或在/etc/security/limits.conf中永久添加redis hard nofile 100000(用户redis的最大文件描述符数),避免因描述符不足导致连接失败。/etc/security/limits.conf中增加redis hard nproc 65535(用户redis的最大进程数),防止进程数过多影响系统稳定性。vm.overcommit_memory=1:允许系统超量使用内存(直到用完为止),防止Redis fork子进程时因内存不足失败(fork是RDB/AOF持久化的关键操作)。swappiness:设置vm.swappiness=10(默认60),减少系统使用swap分区的概率,避免磁盘I/O成为性能瓶颈(Redis是内存数据库,应尽量避免数据换出到磁盘)。io-threads 4设置IO线程数(通常为CPU核心数的1-2倍,如4核CPU设为4),并开启io-threads-do-reads yes(启用多线程读),将读操作分散到多个线程,提高并发处理能力(Redis 6.0+支持)。jemalloc-bg-thread yes(使用jemalloc内存分配器时),在后台整理内存碎片,减少内存碎片率(碎片率过高会导致内存利用率下降)。slowlog-log-slower-than 10000(单位:微秒,默认10毫秒)设置慢查询阈值,记录执行时间超过阈值的命令;slowlog-max-len 128设置慢查询日志最大长度(保留最近的128条),便于后续分析。INFO命令监控:定期执行INFO memory(查看内存使用情况)、INFO clients(查看连接数)、INFO stats(查看整体统计信息)等命令,监控Redis运行状态,及时发现内存泄漏、连接过多等问题。SLOWLOG GET [n]命令获取慢查询日志,分析耗时较长的命令(如KEYS *、HGETALL等),优化查询逻辑(如用SCAN替代KEYS,用HSCAN替代HGETALL)。cluster-enabled yes开启集群模式,将数据分布在多个节点上,提高整体性能和可扩展性(支持水平扩展,突破单机内存限制)。Twemproxy、Redisson等,将请求分发到多个Redis实例,减轻主从复制的负担,提高读取性能(适用于读多写少的场景)。