@CacheEvict 清除多個key的實現(xiàn)方式
借用@Caching實現(xiàn)
入參是基本類型的:
@Caching(evict={@CacheEvict(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(evict={@CacheEvict(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 進行 模糊刪除,發(fā)現(xiàn) @CacheEvict 貌似不支持這樣的操作,然后想起 RedisTemplate 好像支持 key的模糊匹配。
于是,方法有了
既然@CacheEvict做不到,那就用 RedisTemplate
第一步:
獲取key
這里的key就是 : user:role* 這樣的
Set<Object,Object> keys = redisTemplate.keys( key );
第二步:
判斷 keys 非空,然后進行刪除
if (CollectionUtils.isNotEmpty(keys)) {
redisTemplate.delete(keys);
}
總結:
刪除緩存的時候,如果 keys 是空的,則沒有反應,因為查看源碼可知,redisTemplate 幫你判斷了,如果是 空的則 return
此處也有可能刪不掉,刪不掉很可能就是 key 的序列化問題
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
SpringBoot配置lombok與logback過程解析
這篇文章主要介紹了SpringBoot配置lombok與logback過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05
springboot?maven?打包插件介紹及注意事項說明
這篇文章主要介紹了springboot?maven?打包插件介紹及注意事項說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
詳解SpringBoot中@SessionAttributes的使用
這篇文章主要通過示例為大家詳細介紹了SpringBoot中@SessionAttributes的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2022-07-07

