You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redisson RedisExecutor调用过多致CPU负载过高问题咨询

问题描述
  • 运行环境:Java 1.8,Redisson客户端3.16.0版本
  • 缓存TTL配置:
{
  "cache1": {
    "ttl": 12000000
  },
  "cache2": {
    "ttl": 12000000
  },
  "cache3": {
    "ttl": 12000000
  }
}

尽管TTL设置为约6小时,但大量RedisExecutor调用导致CPU利用率过高。即使应用无流量,RedisExecutor仍每秒持续调用Redis执行大量缓存驱逐命令,相关日志片段:

1- RedisExecutor- connection released for command (EVAL) and params [if redis.call('setnx', KEYS[6]

2- RedisExecutor- acquired connection for command (EVAL) and params [if redis.call('setnx', KEYS[6], ARGV[4]) ==
优化建议
  • 调整过期清理任务参数:Redisson默认通过定时任务执行Lua脚本清理过期键,可修改cleanUpKeysAmount(每次清理的键数量)和cleanUpDelay(清理间隔)来降低调用频率。示例配置:
    Config config = new Config();
    config.useSingleServer()
          .setAddress("redis://127.0.0.1:6379")
          .setCleanUpKeysAmount(50) // 降低单次清理键数,默认100
          .setCleanUpDelay(60000);   // 延长清理间隔至60秒,默认10秒
    
  • 切换至Redis原生过期机制:关闭Redisson客户端的过期清理任务,让Redis自身的主动/惰性过期机制处理。配置方式:
    config.setUseCleanUpKeysTask(false);
    
    Redis默认每秒执行10次过期键采样,对性能影响极小,适合TTL较长的场景。
  • 检查缓存容量限制配置:若缓存设置了maxSize,Redisson会触发LRU/LFU淘汰逻辑,即使键未过期也会频繁执行清理。若无需容量限制,移除maxSize配置;若必须保留,调大maxSize以减少触发频率。
  • 升级Redisson版本:3.16.0版本存在过期清理逻辑的性能缺陷,后续版本(如3.23.x)对该模块做了优化,减少了不必要的Lua脚本调用,升级后可缓解CPU占用问题。
  • 验证TTL实际生效情况:排查代码中是否存在手动覆盖TTL的逻辑(如调用set方法时指定了更短的过期时间),若有则修正,避免大量键提前进入过期队列增加清理压力。

内容的提问来源于stack exchange,提问作者Osama Jetawe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:22:16