@CacheEvict 清除多个key的实现方式

网友投稿 1554 2023-02-12

@CacheEvict 清除多个key的实现方式

@CacheEvict 清除多个key的实现方式

借用@Caching实现

入参是基本类型的:

@Caching(evict={@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleId"),

@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.ROLES_NAME + "'+#roleId"),

rzByNGF @CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleId")})

public ResponseData remove(@RequestParam Long roleId) {

………………

}

入参是对象的:

@Caching(evict={@CacheEvict(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "http://'+#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的模糊匹配。

于是,方法有了

既然@CacheEvict做不到,那就用 RedisTemplate

第一步:

获取key

这里的key就是 :  user:role* 这http://样的

Set keys = redisTemplate.keys( key );

第二步:

判断 keys 非空,然后进行删除

if (CollectionUtils.isNotEmpty(keys)) {

redisTemplate.delete(keys);

}

总结:

删除缓存的时候,如果 keys 是空的,则没有反应,因为查看源码可知,redisTemplate 帮你判断了,如果是 空的则 return

此处也有可能删不掉,删不掉很可能就是 key 的序列化问题

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解决redisTemplate中leftPushAll隐性bug的问题
下一篇:小程序可以用vue开发(vuejs开发小程序)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~