Redis在Debian上的监控与调优指南
INFO memory(内存使用情况,如used_memory、mem_fragmentation_ratio)、INFO clients(客户端连接数,如connected_clients)、INFO stats(统计信息,如instantaneous_ops_per_sec每秒操作数)等分类查看关键指标,是日常监控的基础工具。redis-cli monitor),可过滤特定命令(如redis-cli monitor | grep SET),适合调试和排查性能问题,但生产环境需谨慎使用(避免影响性能)。SLOWLOG GET命令查看执行时间超过阈值的命令(需提前设置slowlog-log-slower-than 10000(10ms)和slowlog-max-len 128(日志长度)),定位慢查询(如KEYS *、大Value操作),优化命令执行效率。sudo apt-get install redisinsight),可实时监控内存、连接数、命令执行情况,提供键值浏览、慢查询分析及性能优化建议,适合运维人员直观管理Redis实例。sudo apt install zabbix-agent),配置zabbix_agentd.conf(设置Server=<Zabbix_Server_IP>、Hostname=<Redis_Server_Hostname>),并在Zabbix前端创建监控项(如net.tcp.listen[,6379]监控连接数),实现自动化监控与告警。redis-cli --raw KEYS "user:*" | xargs -I {} redis-cli GET {}批量获取键值)、性能测试(如redis-benchmark -c 100 -n 100000模拟100个客户端发送10万请求,测试QPS),适合快速验证Redis性能。/etc/redis/redis.conf,设置maxmemory为物理内存的70%-80%(如maxmemory 4gb),避免内存溢出;选择合适的淘汰策略(如缓存场景用allkeys-lru,淘汰最近最少使用的键;设置过期时间的键用volatile-lru),确保内存合理利用。hash-max-ziplist-entries 512(Hash元素≤512时用ziplist编码,节省内存);对长文本使用客户端压缩(如GZIP),存入Redis前压缩、读取后解压,减少内存占用。EXPIRE key 3600,过期时间1小时),避免内存无限堆积;调整active-expire-effort 100(提高过期键清理频率,0-100,默认10),加快过期键清理速度;监控mem_fragmentation_ratio(内存碎片率,INFO memory获取),若>1.5则重启Redis或执行MEMORY PURGE(Redis 4.0+)手动释放碎片。/etc/redis/redis.conf,增大tcp-backlog 511(TCP连接队列长度,应对高并发);设置maxclients 10000(最大客户端连接数,默认10000,根据服务器资源调整);添加timeout 300(空闲连接超时时间,秒,释放闲置连接),减少无效连接占用资源。jemalloc(性能优于libc),无需修改allocator参数(/etc/redis/redis.conf中默认allocator jemalloc),确保内存分配高效。echo never > /sys/kernel/mm/transparent_hugepage/enabled禁用,为防止重启失效,将上述命令添加到/etc/rc.local(需赋予执行权限chmod +x /etc/rc.local)。/etc/sysctl.conf,添加net.core.somaxconn = 65535(增大TCP连接队列长度,默认128,高并发需调大)、vm.overcommit_memory = 1(允许内存超额分配,避免fork失败,如AOF重写),执行sysctl -p使配置生效。appendonly no),仅使用RDB(快照),提升性能;若需高数据安全性,开启AOF(appendonly yes),并设置appendfsync everysec(每秒同步一次,平衡性能与安全)。auto-aof-rewrite-min-size 64mb(AOF文件≥64MB时触发重写,减小文件大小)、auto-aof-rewrite-percentage 100(文件增长100%时触发重写),减少AOF文件大小,提升重写效率。/etc/redis/redis.conf,设置bind 192.168.1.100(替换为服务器内网IP,限制访问来源);若需修改默认端口,设置port 6380(避免与系统服务冲突),提升网络安全性。redis.conf中添加tcp-keepalive 300(每300秒发送一次keepalive包,检测死连接,减少无效连接占用资源)。KEYS *命令(用SCAN分页扫描代替,如redis-cli --scan --pattern "user:*"),避免阻塞Redis服务器;使用批量操作(如MGET、MSET代替多个GET、SET命令),减少网络往返次数,提升吞吐量。EXPIRE key 3600,过期时间1小时),自动删除不再需要的数据,减少内存占用。redis-cli --bigkeys扫描大Key(超过10KB的String或5000元素的集合),拆分大Key(如将大Hash拆分为多个小Hash),避免大Key导致的性能问题。