一.Spring的缓存抽象
1.简介
Spring从3.1开始定义了org.springframework.cache.Cache
和org.springframework.cache.CacheManager
接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发。
CacheManager是Spring提供的各种缓存技术抽象接口;
Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache , ConcurrentMapCache等。
2.主要注解
1. @Cacheable
,方法级注解,它指定了被注解方法的返回值是可以被缓存的。
其工作原理是Spring首先会在缓存中查找数据,如果有数据,可以不执行该方法,直接返回远程数据;如果没有则执行方法并缓存结果,然后返回数据。
@Cacheable(cacheNames = {
"emp"},key="#id",/*"keyGenerator = "myKeyGenerator"*/,
condition = "#a0>2",unless ="#id==2")
public Employee getEmp(Integer id){
System.out.println("查询"+id+"号员工");
Employee emp = employeeMapper.getEmpById(id);
return emp;
}
@Cacheable的常用属性:
缓存名称:必须指定一个。
@Cacheable("emp")
@Cacheable(value="emp")
@Cacheable(cacheNames = {"emp1","emp2"})
@Cacheable(cacheNames="emp")
key:缓存数据使用的key,默认是使用方法参数的值。
1.缓存本质上就是键值对,key是使用keyGenerator生成的,默认使用SimpleKeyGenerator生成key;
SimpleKeyGenerator生成key的默认策略如下:
如果没有参数;key=new SimpleKey();
如果有一个参数:key=参数的值
如果有多个参数:key=new SimpleKey(params);
2.除了自动的生成策略,还可以根据实际需要自定义缓存的键,主要实现