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

添加@Cacheable注解后Spring Redis缓存仍不生效如何解决?

排查方案

  • 优先删除冗余的手动缓存操作代码
    @Cacheable 基于Spring AOP代理实现,本身就会完成「先查缓存→缓存无则执行方法→方法返回值写入缓存」的全流程。你当前方法里自己编写的cacheManager读写逻辑已经覆盖了注解要处理的流程,先把这部分代码全部删掉,仅保留数据库查询、结果转换返回的核心逻辑,再做测试。

  • 检查AOP代理是否生效
    @Cacheable 注解仅在外部类调用当前方法时才会被拦截生效,如果是当前类内部的其他方法直接调用getUserInfo,走的是类内部本地调用,不会触发代理逻辑,注解自然失效。
    解决方案:将getUserInfo方法抽离到单独的Bean中注入调用,或者在当前类中注入自身的代理对象,通过代理对象调用该方法。

  • 检查方法与类的权限、注解规则

    1. 被@Cacheable标注的方法必须是public权限,私有、包权限、受保护权限的方法都无法被AOP代理,注解不生效
    2. 标注@Cacheable的方法所在的类必须是Spring管理的Bean,要确保类上有@Service/@Component等注解,被Spring上下文扫描到
  • 检查缓存配置与序列化规则

    1. 可以显式指定缓存Key,避免默认Key生成器逻辑不符合预期:修改注解为@Cacheable(value = "itemCache", key = "#id")
    2. 确认UserInfo类有无无参构造方法,Jackson序列化反序列化需要依赖无参构造,序列化失败会导致缓存写入失效
    3. 临时注释掉disableCachingNullValues()配置,排除方法返回null导致缓存不写入的问题
    4. 确认Redis连接配置正常,可先通过RedisTemplate手动读写Redis,排除连接本身异常的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:04