Redis配置那些事儿,怎么调才能跑得更快更稳一点
- 问答
- 2026-01-01 19:19:10
- 3
Redis这个东西,用起来简单,但真想让它跑得又快又稳,不在配置上下点功夫是不行的,这就像开车,默认配置是经济模式,能开,但想跑山路或者下赛道,就得调整一下了,下面咱们就聊聊怎么调教Redis。
最最关键的肯定是内存。 内存是Redis的命根子,内存出问题,一切都白搭,默认情况下,Redis是不会限制内存使用量的,如果你的机器内存被用光了,Redis可能会被系统用“OOM Killer”给杀掉,那就直接宕机了,第一件事就是设置maxmemory这个参数,告诉Redis最多能用多少内存,比如你机器有8G内存,留给系统和其他应用2G,那就可以设maxmemory 6g。
光设了上限还不够,还得告诉Redis内存快满的时候怎么办,这就是maxmemory-policy策略,常见的有几种选择:allkeys-lru会尝试淘汰最近最少使用的键,不管它有没有设置过期时间,这个比较通用;volatile-lru只淘汰那些设置了过期时间的键里的最近最少使用的;如果你希望有些键永远不被淘汰,可以给他们不设过期时间,然后用这个策略,如果数据特别重要,不允许丢失,那可以用noeviction策略,意思是内存满了之后,新来的写入操作会报错,读操作正常,你得根据自己的业务特点来选,比如如果是缓存场景,用allkeys-lru就挺好,这个观点在Redis官方文档里有明确说明。

说说持久化。 Redis为了把数据存到硬盘上,防止重启后数据丢失,提供了两种主要方式:RDB和AOF,RDB像是拍快照,在某个时间点把整个数据库生成一个压缩文件,优点是文件小,恢复快,缺点是可能会丢失最后一次快照之后的数据,AOF像是写日记,把每一个写命令都记录下来,优点是数据安全,最多丢失一秒的数据(如果配置为每秒同步一次),缺点是文件大,恢复慢。
那怎么调呢?通常建议是两者结合使用,在配置文件里同时开启appendonly yes(开启AOF)和配置RDB的规则(比如save 900 1表示900秒内至少1个键被改动就触发RDB),这样既有RDB的快照基础,又有AOF的增量命令,恢复的时候会用RDB文件做基础,然后重放AOF日志里的命令,兼顾了速度和安全性,关于AOF的同步频率,appendfsync参数建议设为everysec,这是性能和安全的一个很好平衡点,不会像always那样每次写操作都同步导致性能下降,也比no让操作系统自己控制要安全,这一点在《Redis设计与实现》这本书中有详细讨论。

再来,处理连接数问题。 有时候会遇到“无法连接Redis”的错误,可能是因为连接数满了。maxclients参数默认是10000,对于一般应用够了,但如果你的应用并发量特别大,或者有很多客户端连过来,可能需要调大这个值,要确保系统的文件描述符限制(ulimit)也足够大,因为Redis连接会占用文件描述符。
还有,避免大Key和热Key。 这不是一个具体的配置项,但比任何配置都重要,一个大Key(比如一个包含百万个元素的Hash)在持久化、删除、迁移时都会引起Redis长时间阻塞,直接导致服务不稳定,一个热Key(比如某个名人的粉丝列表,被频繁访问)会把压力集中在一台机器的单个CPU核心上(Redis是单线程处理命令的),导致瓶颈,解决办法是在业务设计时就要避免,比如把大Key拆分成多个小Key,给热Key做本地缓存或者用多个Key来分散压力。
一些零散但有用的点:
- 慢查询日志: 一定要开启
slowlog-log-slower-than(比如设置为10000微秒,即10毫秒),定期检查慢查询日志,任何执行时间超过这个阈值的命令都会被记录下来,帮你发现性能瓶颈,可能是命令用的不对,比如用了KEYS *,或者就是遇到了大Key。 - 操作系统优化: 告诉操作系统不要使用Swap分区,一旦Redis的数据被换出到硬盘上,性能会急剧下降,可以通过设置
vm.overcommit_memory=1来避免这种情况发生。 - 合理设置超时:
timeout参数可以设置客户端空闲多少秒后断开连接,释放资源,对于管理连接池很有帮助。
调优Redis不是一个一劳永逸的事情,需要根据你的数据量、访问模式、硬件资源来综合考虑,最好的方法是做好监控,观察内存使用情况、连接数、慢查询、持久化耗时等指标,然后有针对性地进行调整,先从设置内存上限和淘汰策略、配置好持久化这两件大事入手,就能解决大部分稳定性的问题。
本文由雪和泽于2026-01-01发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/72629.html
