首先在POM中导入maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
在启动类中添加开启缓存的注解@EnableCaching
@SpringBootApplication
@EnableCaching
public class CommunityApplication {
public static void main(String[] args) {
SpringApplication.run(CommunityApplication.class, args);
}
}
接下来就可以在方法上添加相关的缓存注解了:
@Cacheable:根据方法请求参数对其结果进行缓存(查询)
- cacheNames/value:缓存的名称
- key:缓存数据使用的key,默认使用方法参数的值
- condition:指定符合条件的情况下才缓存;如condition="#id>0" 当id的参数值大于0时加入缓存
- unless:否定缓存,当unless指定的条件为true,方法的返回值不会被缓存,可以获取到结果进行判断;如unless="#result==null"
- sync:是否使用异步模式,在多线程环境下,某些操作可能使用相同参数同步调用。默认情况下,缓存不锁定任何资源,可能导致多次计算,而违反了缓存的目的。对于这些特定的情况,属性 sync 可以指示底层将缓存锁住,使只有一个线程可以进入计算,而其他线程堵塞,直到返回结果更新到缓存中。
- keyGenerator:key的生成器,可以自己指定key的生成器的组件id
//自定义配置类配置keyGenerator
@Configuration
public class MyCacheConfig {
@Bean("myKeyGenerator")
public KeyGenerator keyGenerator(){
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
return method.getName()+"["+ Arrays.asList(params).toString() +"]";
}
};
}
}
@CachePut:先调用方法,然后将方法返回的结果缓存起来(更新)
- value:缓存的名称
- key:缓存数据使用的key #result.id表示方法返回的结果对象中的id属性
@CacheEvict:默认先调用方法,然后将指定的缓存删除(删除)
- value:缓存的名称
- key:指定要清除的数据
- allEntries =true:清除这个缓存组件中所以的数据
- beforeInvocation = true:缓存的清除是否在方法之前执行,true表示先清除缓存再执行方法
@Caching:定义复杂的缓存规则
@Caching(
cacheable = {
@Cacheable()
},
put = {
@CachePut(),
@CachePut()
},
evict = {
@CacheEvict()
}
)
public 返回值 方法名(参数类型 参数){
//代码
return 返回结果;
}
@CacheConfig("emp"):添加再类上,类中所有的方法共享该缓存名称