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

Redis是否支持Spring Framework的@Cacheable(sync = true)注解?

Redis对@Cacheable(sync=true)的支持说明

首先明确:Spring Cache的@Cacheable(sync=true)特性,Spring Data Redis(Redis作为缓存后端)是支持的,你的场景没生效大概率是配置或使用细节出了问题,以下是关键要点和排查方向:

核心原理回顾

当sync=true时,同一缓存key的并发请求中,只有第一个线程会执行目标服务逻辑,其他线程会阻塞等待第一个线程将结果写入缓存后,直接读取缓存值,以此避免缓存击穿。

Redis支持该特性的前提

  1. Spring Data Redis版本要求:必须使用2.0及以上版本,早期版本对sync的实现存在缺陷,无法正常生效。
  2. 缓存配置无异常:默认的RedisCacheManager已经支持同步逻辑,如果你自定义了RedisCacheConfiguration,不要覆盖或禁用相关同步机制,比如确保RedisCacheWriter是正确初始化的(同步逻辑依赖它的锁实现)。
  3. KeyGenerator生成的key必须完全一致:你自定义的myGenerator要保证并发请求生成的key完全相同——sync机制是基于缓存key做线程同步的,key不同的话,每个线程都会认为是不同的缓存项,自然都会执行服务逻辑。

排查步骤

  • 验证KeyGenerator的输出:在myGenerator的生成方法中添加日志,打印每次生成的key,确认并发请求时输出的key完全一致。
  • 检查依赖版本:查看项目依赖中Spring Data Redis的版本,确保≥2.0.x。
  • 简化场景测试:搭建一个最小测试用例,只保留@Cacheable(sync=true)的基本配置,模拟两个线程同时调用,观察是否只有一个线程执行服务逻辑。
  • 排查Redis写入问题:检查Redis服务器是否正常,缓存是否成功写入——如果第一个线程的结果没写入Redis,后续线程还是会执行方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:13:13