当前位置:首页 > 问答 > 正文

怎么调Redis参数才能撑起高并发,配置上有哪些坑和技巧分享

想把Redis调教成能扛住高并发的猛将,光靠默认配置是远远不够的,这就像给你一辆跑车,但你一直用怠速开,根本发挥不出它的威力,高并发场景下,Redis的瓶颈往往不在CPU,而在内存、网络和持久化策略上,下面就直接说关键的参数、容易踩的坑和实用的技巧。

第一,连接数是个大门,别让客户在门口排队。

高并发第一道坎就是连接,默认情况下,Redis的 maxclients 参数是10000,对于一般应用够了,但如果你的应用有海量短连接,这个数可能成为瓶颈,你需要用 info clients 命令监控 connected_clients 是否接近上限,如果接近,可以适当调高它,但这里有个大坑:操作系统对单个进程能打开的文件描述符数也有默认限制(通常是1024),你可能需要同时用 ulimit 命令提高系统的限制,否则光改Redis配置没用,连接数太多会耗内存,因为每个连接都需要占用资源,一个技巧是使用连接池,让连接复用,避免频繁创建和销毁连接的开销。

第二,内存是命根子,管理和淘汰策略是关键。

高并发下数据量大,内存最容易吃紧,Redis默认是无限使用内存,直到撑爆为止,这肯定不行,你必须设置 maxmemory 参数,限定Redis能使用的最大内存,设了上限之后,更关键的是设置 maxmemory-policy(内存淘汰策略),这是核心中的核心。

  • :千万别用默认的 noeviction(不淘汰),这会导致内存写满后所有写请求都失败,服务基本不可用。
  • 技巧:根据你的数据特性选策略。
    • 如果都是关键数据,不能丢,那就选 allkeys-lru(从所有key中淘汰最近最少使用的),这是最常用的策略。
    • 如果你给key设置了过期时间,并且有冷热数据区分,可以用 volatile-lru(只从设了过期时间的key中淘汰最近最少使用的)。
    • 如果想尽量保证公平,避免某些大key长时间占用内存,可以用 allkeys-random(随机淘汰)。
    • 另一个大坑是关于持久化的:当使用AOF持久化且AOF文件在重写时,如果此时内存满了,Redis可能会因为要执行命令而无法淘汰出足够内存,导致写操作阻塞。maxmemory 不要设得“太满”,要留一点缓冲余地。

第三,持久化是双刃剑,平衡数据安全与性能。

怎么调Redis参数才能撑起高并发,配置上有哪些坑和技巧分享

Redis的持久化方式RDB和AOF,在高并发下需要精心调配。

  • RDB(快照):通过 save 参数配置触发条件,save 900 1 表示900秒内至少有1个key变化就保存一次。

    • :默认配置可能会在流量高峰时触发BGSAVE,fork一个子进程来持久化,如果数据量很大,fork过程会阻塞主进程(虽然时间很短),可能导致瞬间延迟飙升。
    • 技巧:根据业务低峰期调整触发条件,比如设置在凌晨,或者直接关闭自动保存,通过脚本在业务低峰期手动执行 bgsave
  • AOF(追加日志):数据更安全,但对性能影响更大,关键参数是 appendfsync

    怎么调Redis参数才能撑起高并发,配置上有哪些坑和技巧分享

    • always:每个写命令都刷盘,最安全,但性能最差,高并发下基本不可用。
    • everysec:每秒刷一次盘,是默认值,也是推荐值,在安全性和性能之间取得了很好的平衡。
    • no:由操作系统决定何时刷盘,性能最好,但可能丢失较多数据(比如系统崩溃时)。
    • 技巧:AOF文件会越来越大,需要定期重写(bgrewriteaof),要监控重写过程,因为和RDB的BGSAVE一样,也存在fork阻塞的风险,可以设置 auto-aof-rewrite-percentageauto-aof-rewrite-min-size 来控制自动重写的触发条件。

第四,系统层面和网络层面的优化。

光调Redis本身还不够,系统环境也很重要。

  • 关闭透明大页(Transparent Huge Pages):这是一个必坑项!Linux系统的这个特性会严重导致Redis在持久化fork时延迟极高,必须要在系统层面关闭它,网上搜“关闭透明大页 Redis”有详细命令,这是无数人踩过的血泪坑。
  • 合理设置TCP backlogtcp-backlog 参数决定了连接等待队列的长度,在高连接请求速率下,默认值511可能太小,可以适当增加到1024或更大,但要同时调整系统的 /proc/sys/net/core/somaxconn 值。
  • 禁用SWAP:确保服务器有足够内存,并禁用交换分区,一旦Redis的数据被换出到磁盘,性能会断崖式下降。

也是最重要的技巧:监控。

不要凭感觉调参,一定要用 info 命令全面监控Redis的状态,关注几个关键指标:内存使用率、连接数、持久化状态、每秒命令处理量(ops)、延迟时间,通过监控数据来指导你调参,才能有的放矢。

高并发配置的核心思路是:打开连接的大门、管好内存的淘汰、平衡持久化的开销、扫清系统的障碍,并用监控数据说话。 没有一劳永逸的“黄金配置”,只有最适合你业务场景的配置。