软件编程
位置:首页>> 软件编程>> java编程>> @CacheEvict 清除多个key的实现方式

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

作者:Amy##  发布时间:2023-11-21 08:28:04 

标签:@CacheEvict,清除,key

借用@Caching实现

入参是基本类型的:


@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 进行 模糊删除,发现 @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 的序列化问题

来源:https://blog.csdn.net/Amy126/article/details/88661773

0
投稿

猜你喜欢

  • 一、概述现在大多数的电商APP的详情页长得几乎都差不多,几乎都是上面一个商品的图片,当你滑动的时候,会有Tab悬浮在上面,这样做用户体验确实
  • //构造文件File类File f=new File(fileName);//判断是否为目录f.isDirectory();//获取目录下的
  • 本文实例为大家分享了Flutter自定义圆盘取色器的具体代码,供大家参考,具体内容如下下面展示一些 内联代码片。圆盘取色器效果图完整代码im
  • 1、JavaBean介绍 * JavaBean的定义:JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)
  • 前文本章是关于Java流程控制语句的最全汇总,本篇为汇总中篇。流程是人们生活中不可或缺的一部分,它表示人们每天都在按照一定的流程做事。比如出
  • 在很多场景下,maven不能直接访问到外网时,使用代理是其中常见的一种方式。这篇文章整理一下常见的maven中设置代理的方法。代理服务器代理
  • 本文介绍了Spring Security 控制授权的方法,分享给大家,具体如下:使用授权方法进行授权配置每一个 Spring Securit
  • 一般文本文件我们以日志文件.log文件为例:import java.io.BufferedReader; import java.io.Fi
  • 本博文将为您提供自Java 7以来增加的很棒的新功能的示例。我将展示每个Java版本的至少一项重大改进,一直到2020年秋季发布的Java
  • 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变
  • 上帝之火本系列讲述的是开源实时监控告警解决方案Prometheus,这个单词很牛逼。每次我都能联想到带来上帝之火的希腊之神,普罗米修斯。而这
  • 本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下import java.util.ArrayList;
  • 引言备忘录模式经常可以遇到,譬如下面这些场景:浏览器回退:浏览器一般有浏览记录,当我们在一个网页上点击几次链接之后,可在左上角点击左箭头回退
  • 本文的目的是要实现左右滑动的指引效果。那么什么是指引效果呢?现在的应用为了有更好的用户体验,一般会在应用开始显示一些指引帮助页面,使用户能更
  • 类注解@component 标注类,泛指各种组件,类不属于各种分类的时候,用它做标注。@Service 标注类,声明该类为业务层组件,用于处
  • 如果不知道,类的静态变量存储在那? 方法的局部变量存储在那? 赶快收藏Java内存区域主要可以分为共享内存,堆、方法区和线程私有内存,虚拟机
  • 简单的实现了一个树的结构,很不完善!后续参考一些其他代码的实现。试图实现叶子存在可变的节点,能够用来解析xml文件。叶子的代码:packag
  • 一、数组创建1.1 声明并赋值int[] a = {1,2,3};1.2 声明数组名开辟空间并且赋值int[] a;a = new int[
  • 打包与运行在项目开发完成之后,可以直接用IDEA将其打包成JAR包运行,也可以打包成WAR包运行以便在多服务器、多配置环境下运行。双击cle
  • 对接支付宝支付接口,官方文档已经写的很清楚了,但是也有很多像我一样的小白,第一次对接支付宝支付接口,会有些迷茫,所以我在此写下这篇文章,给我
手机版 软件编程 asp之家 www.aspxhome.com