@CacheEvict 清除多个key的实现方式
更新时间:2021年2月13日 14:58
[email protected] 清除多个key的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
入参是基本类型的:
@Caching([email protected](value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleId"), @CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.ROLES_NAME + "'+#roleId"), @CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleId")}) public ResponseData remove(@RequestParam Long roleId) { ……………… }
入参是对象的:
@Caching([email protected](value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleDto.roleId"), @CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.ROLES_NAME + "'+#roleDto.roleId"), @CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleDto.roleId")}) public ResponseData edit(RoleDto roleDto) { this.roleService.editRole(roleDto); return SUCCESS_TIP; }
补充:@CacheEvict 模糊删除缓存问题-RedisTemplate 模糊key删除缓存
缓存管理使用注解形式,非常方便了我们的使用,然而今天我想 使用 @CacheEvict 的实和key 进行 模糊删除,发现 @CacheEvict 貌似不支持这样的操作,然后想起 RedisTemplate 好像支持 key的模糊匹配。
于是,方法有了
[email protected],那就用 RedisTemplate
第一步:
获取key
这里的key就是 :  user:role* 这样的
Set<Object,Object> keys = redisTemplate.keys( key );
第二步:
判断 keys 非空,然后进行删除
if (CollectionUtils.isNotEmpty(keys)) { redisTemplate.delete(keys); }
总结:
删除缓存的时候,如果 keys 是空的,则没有反应,因为查看源码可知,redisTemplate 帮你判断了,如果是 空的则 return
此处也有可能删不掉,删不掉很可能就是 key 的序列化问题
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。如有错误或未考虑完全的地方,望不吝赐教。
相关文章
- 怎么清除sql server日志
- js遍历json的key和value的实例
- 清除aspx页面缓存的程序实现方法
- C# 获取动态key的json对象的值案例
- CSS不得不掌握的技巧【清除float浮动】
- 七种常见木马的清除方法
- 记录无法安装mysql-Invalid GPG Key from file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql的解决办法
- python的dict判断key是否存在的方法
- 根据key删除数组中指定的元素实现方法
- 解决postgresql 自增id作为key重复的问题
- IDEA中的clean,清除项目缓存图文教程
- JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
- tensorflow 重置/清除计算图的实现
- spring boot+redis 监听过期Key的操作方法
- 清除DIV浮动-使用:after
- uniapp微信小程序:key失效的解决方法
- Redis集群下过期key监听的实现代码
- VS2015为console.readkey添加代码片段的方法
- 浅谈redis key值内存消耗以及性能影响
- 基于C++ map中key使用指针问题的详解