SpringCache常用注解及key中参数值为null的问题解析
发布日期:2021-04-30 21:03:53 浏览次数:76 分类:精选文章

本文共 1318 字,大约阅读时间需要 4 分钟。

Redis缓存注解详解

@Cacheable注解

@Cacheable注解用于将方法返回的数据存储到Redis缓存中,以提高后续请求的速度。该注解通常加在需要缓存数据的方法上。

参数说明

参数名 说明 示例
value 缓存存储的前缀,用于标识缓存组件。 value="cache:test"
key 缓存存储的后半部分,用于唯一标识缓存键。 key="#p0 + ':' + #p1"
unless 决定不缓存的情况,条件表达式。 unless="#result == null"
condition 决定缓存的情况,条件表达式。 condition="#condition"

例如:

@Cacheable(value = "cache:test", key = "'id='+#id", unless = "#result == null")public String getNameById(Integer id); // 缓存键为 cache:test:id=123

@CacheEvict注解

@CacheEvict注解用于删除Redis中的缓存数据,常用于需要清除缓存的方法上。

参数说明

参数名 说明 示例
value 要删除的缓存前缀。 value="cache:test"
key 要删除的缓存后半部分。 key="#p0 + ':' + #p1"
allEntries 是否删除value下的所有子键。 allEntries=true

例如:

@CacheEvict(value = "cache:test", key = "#p0 + ':' + #p1", allEntries = true)public void clearCache(Integer p0, Integer p1); // 删除 cache:test:p0:p1 及所有子键

@Caching注解

@Caching注解用于同时应用多个缓存注解,常用于需要同时进行缓存写入和删除的场景。

示例

@Caching(    evict = {        @CacheEvict(...),        @CacheEvict(...)    })public void combinedCacheOperation(); // 同时执行缓存写入和删除操作

Redis缓存中的Key值问题

在实际应用中,可能会遇到以下问题:

  • 参数名与实现类参数不一致

    假设在接口中定义为 id,但实现类中的参数名为 userId,则缓存键可能无法正确解析。
    解决方法:

    • 直接使用 #p0 代替具体参数名。
    • 或者在实现类中使用与接口一致的参数名。
  • Key中参数为Null

    如果参数为 null,Redis会报错。
    解决方法:

    • 在方法返回之前,将 null 参数替换为一个默认值。
    • 或者在缓存注解中添加默认处理逻辑。
  • 注意事项

    • 参数名必须与实现类的参数一致,否则缓存键无法正确生成。
    • 避免在 key 中使用 null,可以使用默认值或 @Cacheablecondition 参数控制缓存。

    通过合理配置缓存注解,可以有效管理Redis缓存,提升应用性能。

    上一篇:线程协作
    下一篇:线程-安全发布对象(六)

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2026年06月17日 14时43分25秒