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,可以使用默认值或@Cacheable的condition参数控制缓存。
通过合理配置缓存注解,可以有效管理Redis缓存,提升应用性能。
发表评论
最新留言
感谢大佬
[***.8.128.20]2026年06月17日 14时43分25秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
phpunit
2023-02-28
phpWhois 项目推荐
2023-02-28
phpwind部署问题
2023-02-28
PHP__call __callStatic
2023-02-28
php一句话图片运行,【后端开发】php一句话图片木马怎么解析
2023-02-28
php上传文件找不到临时文件夹
2023-02-28
PHP下curl用法分析
2023-02-28
php与web服务器关系
2023-02-28
redis事务操作
2023-02-28
PHP中array_merge和array相加的区别分析
2023-02-28
PHP中dirname(__FILE__)的意思
2023-02-28
PHP中extract()函数的妙用
2023-02-28
PHP中implode()和explode()
2023-02-28
PHP中serialize和json序列化与反序列化的区别
2023-02-28
Redis事务处理
2023-02-28
php中使用ajax进行前后端json数据交互
2023-02-28
Redis事务和锁操作
2023-02-28
PHP中如何得到数组的长度
2023-02-28
php中引入文件几种方式的区别
2023-02-28
PHP中把stdClass Object转array的几个方法
2023-02-28