Redis那些配置细节没注意,性能其实还能再提升不少呢
- 问答
- 2025-12-28 20:25:37
- 4
很多人在用Redis的时候,觉得只要安装好,能存数据、能取数据就完事儿了,配置文件里那一大堆英文,看着就头疼,干脆直接用默认的,但其实啊,Redis的作者们给了我们很多可以“拧一拧”的螺丝刀,稍微调整一下,可能就能让你的Redis跑得更快、更稳,下面这些细节,你要是没注意,那性能的潜力可能还真没挖出来。
最大内存和淘汰策略:别让Redis“撑死”
这是最最关键的配置之一,默认情况下,Redis是不设置最大内存限制的,它会一直吃内存,直到把你的服务器内存啃光,然后被操作系统强行“杀掉”。(来源:Redis官方文档关于maxmemory的说明)
你首先要做的,就是根据你的服务器情况,在配置文件里加上maxmemory这个参数,比如设为4G或8G,光设了上限还不够,你得告诉Redis,当内存快用完的时候,该怎么办,这就是maxmemory-policy配置项。
很多人可能就选了默认的noeviction(不淘汰),意思是内存满了之后,所有需要更多内存的写命令都会报错,这对于要求数据绝对不能丢的场景可能有用,但大多数时候,我们希望的是Redis能自动淘汰一些旧数据,为新数据腾地方。
这时候,你可以根据业务特点选:
allkeys-lru:从所有key中挑最近最少使用的淘汰,这是比较通用和推荐的选择。volatile-lru:只从设置了过期时间的key中淘汰。allkeys-random:随机淘汰所有key。
选对了策略,Redis就能在内存不足时优雅地“瘦身”,而不是直接“罢工”。(来源:Redis官方文档关于内存淘汰策略的详解)

持久化配置:在数据安全性和性能之间找平衡
Redis有两种主要的持久化方式:RDB(快照)和AOF(日志),它们会影响性能。
-
RDB的保存频率:RDB是隔一段时间拍个数据快照,默认配置可能像
save 900 1(900秒内1个key改变就保存)、save 300 10(300秒内10个key改变就保存),如果你的数据很重要,可以调高频率,比如save 60 10000(1分钟内有1万个改变就保存),但这会增加磁盘I/O压力,可能影响性能,如果允许丢失几分钟的数据,甚至可以调低频率来换取性能。(来源:Redis.conf配置文件中关于save指令的注释) -
AOF的同步策略:AOF是记录每一条写命令,有个关键配置叫
appendfsync,控制多久把日志写到磁盘上。always:每个写命令都同步,最安全,但性能最差,因为每个命令都要等磁盘写完。everysec:每秒同步一次,这是默认值,也是很好的折中,最多丢失1秒数据。no:让操作系统决定何时同步,性能最好,但可能丢失较多数据。
对于大多数场景,用RDB做定时备份,同时开启AOF(用everysec)保证数据安全性,是比较平衡的做法,如果纯粹追求极致性能,且能容忍数据丢失,可以只使用RDB,并适当拉长保存间隔。

网络和连接相关:处理高并发的关键
当你的应用有大量客户端连Redis时,下面两个配置就很重要了。
-
tcp-keepalive:这个值默认是300秒,它用来检测死掉的客户端连接,如果值设得太大,一个连接断了,Redis可能要等很久才能发现并释放资源,在高并发场景下,这可能导致Redis堆积大量无效连接,占用文件描述符,最终无法接受新连接,可以适当调小这个值,比如60秒或120秒,让Redis能更快地清理“僵尸”连接。(来源:基于网络编程和Redis连接管理的常见实践) -
timeout:这个参数表示客户端空闲多少秒后关闭连接,默认是0,代表永不关闭,如果客户端不主动关闭连接,这些空闲连接会一直留着,在生产环境中,建议设置一个合理的超时时间,比如300秒或600秒,避免连接数无限增长,但要注意,设得太短可能会导致连接被频繁断开的开销。
慢查询日志:找到拖慢速度的“元凶”

Redis可以记录执行时间超过指定阈值的命令,这叫慢查询日志,默认情况下,这个阈值slowlog-log-slower-than是10000微秒(10毫秒),对于现在的高速Redis来说,一个命令执行超过10毫秒可能就算慢了。
你可以根据你的服务器性能和应用要求,把这个值调小,比如调到5000微秒(5毫秒)甚至1000微秒(1毫秒),这样你就能捕捉到更多潜在的性能瓶颈命令,比如没用索引的KEYS *操作(这个命令本身就应该避免,用SCAN代替)、复杂的大数据量操作等,定期检查慢查询日志,是优化Redis使用方式、提升性能的黄金法则。(来源:Redis官方文档关于慢查询日志的说明)
操作系统层面的小细节:内核参数也别放过
性能瓶颈不在Redis本身,而在操作系统。
-
透明大页(Transparent Huge Pages):这个Linux内核特性对于Redis这种内存密集型应用来说,可能会导致延迟飙升,Redis官方文档明确建议将其禁用,你可以通过命令
echo never > /sys/kernel/mm/transparent_hugepage/enabled来禁用,并写入开机脚本。(来源:Redis官方文档中关于Latency的章节强烈建议禁用THP) -
Overcommit Memory:当Redis做持久化(尤其是BGSAVE)时,可能会需要fork一个子进程,如果系统内存紧张,fork可能会失败,将
vm.overcommit_memory设置为1,可以降低这种风险,命令是sysctl vm.overcommit_memory=1。
把Redis用好,不仅仅是会发SET和GET命令,花点时间了解一下这些配置项背后的含义,结合你自己的业务场景做一些调整,就像给一辆好车做了精细的调校,它能带给你的速度和稳定性提升,绝对是值得的。
本文由寇乐童于2025-12-28发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/70232.html
