Lettuce 的 validateConnection() 方法在验证 Redis 连接有效性时使用了 synchronized 同步锁。方法内部先对 connectionMonitor 加锁,然后通过同步方式执行 ping() 命令验证连接,直到验证完成后才释放锁。在高并发场景下,多个 Reactor 线程需要获取同一个 monitor 锁,导致线程互相阻塞等待。通过 jstack 可以观察到大量 Reactor 线程阻塞在同一个 monitor 上。这种锁争抢还会导致 Redis 连接池无法得到充分利用,连接池大小始终处于 min-idle 水平。解决方案是在业务代码中删除 LettuceConnectionFactory.setValidateConnection(true) 调用。如果确实需要校验连接活性,可以改用定时任务方式,例如通过 @Scheduled(cron = "0/2 * * * * *") 定期执行验证,而非每次获取连接时验证。




