一、引入相关依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>

SpringBoot检查到有redis的启动依赖,就会将默认的ConcurrentMapCacheManage换为 RedisCacheManager;默认创建的 RedisCacheManager 操作redis的时候使用的是 RedisTemplate<Object, Object>,并且默认使用jdk的序列化机制

二、使用相关@Cachexxxx:

注意:该注解特性和@Transactional一致,基于AOP,需要外界调用

SpringCache是对缓存使用的抽象,通过在已有代码中打上几个预定义的注释,就可以实现我们希望达到的缓存效果

@EnableCaching
作用:标注在Configuration类上,用于启用Cache注解

@CachePut 
作用:标注到写数据的方法上,如新增/修改方法,调用方法时会自动把符合条件的数据存入缓存

public @interface CachePut {
String[] value(); //缓存的名字,可以把数据写到多个缓存 // value -》 cacheName 二者选一,必须指定 //最终 value::key--obj
String key() default ""; //缓存key,如果不指定将使用默认的KeyGenerator生成(SimpleKey:使用方法参数)
String condition() default ""; //满足缓存条件的数据才会放入缓存,CachePut的condition只在调用方法之后判断,可以操作result
String unless() default ""; //用于否决缓存更新的,在方法执行之后,用result进行判断
}

@CacheEvict
作用:标注到移除数据的方法上,如删除方法,调用方法时会从缓存中移除符合条件的数据

public @interface CacheEvict {
String[] value(); //缓存的名字,可以从多个缓存中移除数据
String key() default "";
String condition() default ""; //满足缓存条件的数据才会从缓存中移除,condition在调用方法之前和之后都会判断
boolean allEntries() default false; //是否移除所有数据
boolean beforeInvocation() default false;//是调用方法之前移除/还是调用之后移除 ,默认是调用之后移除
}

@Cacheable
作用:标注到读取数据的方法上。如查找方法:先从缓存中读取,如果没有再调用方法获取数据,否则不执行方法体,然后把数据添加到缓存中。

@Caching
作用:定义若干组的Cache注释,用于实现多个缓存逻辑。例如用户新增成功后,添加id-->user;username--->user;email--->user到缓存,代码如下:

@Caching(
put = {
@CachePut(value = "mycache", key = "#user.id"),
@CachePut(value = "mycache2", key = "#user.username.concat(#user.email)")
},
evict = {
@CacheEvict(value = "tempcache", key = "#user.id")
}
)
public User save(User user) {
.............
}

三、 缓存条件condition和unless的执行时机:

@Cacheable中的condition是在执行方法之前用于被判断是否符合从缓存中读取,因此它无法使用返回值#result;而其unless是在执行方法之后做判断,因此它可以使用返回值#result。
@Cacheput中的condition和unless都是在执行方法之后用于被判断是否符合将结果保存到缓存中,因此它们都可以使用返回值#result。
@CacheEvict的condition由beforeInvocation的值来确定是在方法调用前还是在方法调用后执行。若beforeInvocation为true则condition在方法调用前执行;否则condition在方法调用后执行。

四、SpEL语法及可使用的上下文数据:

https://blog.csdn.net/m0_37962779/article/details/78747619

SpringBoot集成redis,使用@Cachexxxx的更多相关文章

  1. 【springBoot】springBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  2. SpringBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  3. springboot集成redis(mybatis、分布式session)

    安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...

  4. Windows环境下springboot集成redis的安装与使用

    一,redis安装 首先我们需要下载Windows版本的redis压缩包地址如下: https://github.com/MicrosoftArchive/redis/releases 连接打开后如下 ...

  5. springBoot集成Redis遇到的坑(择库)源码分析为什么择库失败

    提示: springboot提供了一套链接redis的api,也就是个jar包,用到的连接类叫做LettuceConnectionConfiguration,所以我们引入pom时是这样的 <de ...

  6. SpringBoot | 集成Redis

    Windows下安装: https://github.com/MicrosoftArchive/redis/releases zip下就解包到自定义目录下,msi就跟着步骤安装 进入安装目录下运行命令 ...

  7. springboot集成redis使用redis作为session报错ClassNotFoundException类RememberMeServices

    springboot 集成redis使用redis作为缓存,会报错的问题. 错误信息: java.lang.IllegalStateException: Error processing condit ...

  8. Springboot集成Redis步骤

    Spring boot 集成Redis的步骤如下: 1.在pom.xml中配置相关的jar依赖: <!--加载spring boot redis包 --> <dependency&g ...

  9. SpringBoot集成Redis

    1.引入 spring-boot-starter-redis <dependency> <groupId>redis.clients</groupId> <a ...

  10. SpringBoot集成Redis分布式锁以及Redis缓存

    https://blog.csdn.net/qq_26525215/article/details/79182687 集成Redis 首先在pom.xml中加入需要的redis依赖和缓存依赖 < ...

随机推荐

  1. echars柱状图修改每条柱的颜色

    在实际开发中,可能会需要到柱状图内某个柱需要特殊颜色表示,我这里的应用是排名,突出显示出当前的数据. 在Color参数中添加一个方法可以任意返回需要的颜色值 function (params) { i ...

  2. tfs项目管理

    同一个地址下有多个项目,但同一个文件只能映射一次.有两种方式: 1.只添加一次映射,即只给根目录添加映射,如下图,这样西面的具体的项目就不需要挨个添加了. . 2.每个项目挨个添加映射,使用这种方式要 ...

  3. 多线程之sleep和wait的区别

    它们最大本质的区别是:sleep()不释放同步锁,wait()释放同步锁. 还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用inter ...

  4. SpringCloud系列三:SpringSecurity 安全访问(配置安全验证、服务消费端处理、无状态 Session 配置、定义公共安全配置程序类)

    1.概念:SpringSecurity 安全访问 2.具体内容 所有的 Rest 服务最终都是暴露在公网上的,也就是说如果你的 Rest 服务属于一些你自己公司的私人业务,这样的结果会直接 导致你信息 ...

  5. sql server 查看锁表SQL【转】

    1.select * from sys.dm_tran_locks或sp_LOCK 查看request_node 字段中为'X'(排他锁)或'IX'(意向排他锁)2.用sp_who2 + pid(进程 ...

  6. playbook

    1 --- - hosts: web-server 3 remote_user: root tasks: - name: stop logstash shell: PID=` $PID &&a ...

  7. RGB ECT 4BIT 压缩后质量远高于RGB ETC2 4BIT

    今天突然发现这个.原来以为ETC2在任何方面都强于ETC,没想到...用了RGB ETC2 4BIT 压缩的贴图看起来有点糊,改用RGB ECT 4BIT后竟然非常清晰,而且大小与RGB ECT2 4 ...

  8. JAVA四则运算(读写文件)

    完成时间:17:10 package 四则运算试题; import java.io.BufferedReader; import java.io.PrintStream; import java.ut ...

  9. 数字三角形/数塔问题(DP入门题)

    有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大. 样例输入: 5 13 11 8 12 7 26 6 14 15 8 12 7 ...

  10. python 读取excel数据

    import xlrd book = xlrd.open_workbook(file_path)#打开文件 sheet = book.sheet_by_index(0) #获取第一个工作簿 print ...