springboot缓存使用
程序员文章站
2022-04-12 22:09:07
springboot缓存使用步骤导入坐标依赖(pom.xml) org.springframework.boot spring-boot-starter-cache 2.在主程序中开启缓存注解package com.l...
springboot缓存使用
步骤
- 导入坐标依赖(pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2.在主程序中开启缓存注解
package com.lmh.springboot07;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.EnableCaching;
/**
* 缓存注解的几个用法
* @Cacheable:主要针对方法配置,能根据方法参数的请求参数对其结果进行缓存
* @CacheEvict:清空缓存
* @CachePut:保证方法被调用,有希望结果被缓存
*/
@SpringBootApplication
@EnableCaching//开启注解缓存
public class SpringBoot07Application {
public static void main(String[] args) {
SpringApplication.run(SpringBoot07Application.class, args);
}
}
缓存注解使用
1.@Cacheable使用方法
@Autowired
private StudentMapper studentMapper;//可自定义mapper,操作数据便于测试
/**
* @Cacheable的属性:
* cacheName/value:指定缓存组件的名字;
* key:缓存数据使用的key;可以用它来指定,用默认方法使用的是参数的值;也可以编写spEL表达式:#id;参数id的值
* keyGenerator:key的生成器;可以自己指定key的生成器的组件id
* key和keyGenerator二选一
* cacheManager:指定缓存管理器,例如指定使用redis的,不同的缓存管理器功能是不一样的,与cacheResolver二选一
* condition:指定符合条件的情况才缓存
* unless:否定缓存,当unless指定条件为true,方法的返回值就不会被缓存,可以获取到结果进行判断
* sync:是否使用异步模式,异步开启事unless就不可以用了
*
* @param id
* @return
* @throws Exception
*/
@Override
@Cacheable(cacheNames = "student",key = "#id",condition = "#id>1",unless = "#id==2")
public Student findById(Integer id) throws Exception {
return studentMapper.findById(id);
}
作用:第一次查询数据,先在缓存中查找又没有cacheNames = “student”,key = “#id”,如果没有,则开启以个缓存,在执行方法,当第二次访问时直接在缓存中取
2.@Cacheput
/**
* @CachePut,既调用方法,有更新缓存数据
* 修改某个数据,并同时更新
* 运行时机是,先调用方法,在将目标方法结果缓存起来
*/
@Override
@CachePut(cacheNames = "student",key = "#result.id")
public Student update(Student student) throws Exception {
studentMapper.update(student);
return student;
}
作用为:一般用于更新数据的操作中使用该缓存注解,当更改一个数据时,改完后的结果存入缓存中,使用其他查询方法,从缓存中取的数据就是更新后的数据,与@Cacheable执行过程不同,@CachePut可以使用result的原理就是先执行方法,在将结果存,@Cacheable不可以使用result
@CacheEvict
/**
* @CacheEvict,缓存删除
* key:指定要清除的数据
* allEntries=true,指定清除这个缓存所有数据
* beforeInvocation=false:缓存的清除是否在缓存之前执行,默认false,在方法之后再执行的,true为方法之前,可以防止删除异常,缓存还在的情况
*/
@CacheEvict(cacheNames = "student",key = "#id")
public void delete(Integer id) throws Exception {
studentMapper.delete(id);
}
作用:一般用于删除操作,删除一个数据,也把相应的缓存删除,在此查询是要调用sql语句操作数据库
@Caching
/**
* @Caching一般用于很复杂的操作,可以将他们组合使用,下面例子没有一一测试
*/
@Caching(
cacheable = {
@Cacheable(cacheNames = {"student"},key ="#id",condition = "#id>0",unless = "#name=lmh")
},
put = {
@CachePut(cacheNames = {"student"},key = "#id"),
@CachePut(cacheNames = {"hhh"},key = "#id")
},
evict = {
@CacheEvict(cacheNames = {"hhh"},key = "#id")
}
)
public Student all(Student student){
//省略过程了,操作数据的操作自定义即可
return student;
}
作用:一般用于复杂操作,一个方法改变数据很多时,可使用该注解,将上面三种注解组合使用,以达到目标效果
缓存工具
本文地址:https://blog.csdn.net/weixin_44884861/article/details/107687744