1.Spring 缓存介绍
1.1 Spring 缓存简介
Spring 提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Ehcache),但本身不直接提供缓存功能的实现。它支持注解方式使用缓存,非常方便。
1.2 缓存管理器
Spring 3.1内置了五个缓存管理器实现,如下所示:
- SimpleCacheManager
- NoOpCacheManager
- ConcurrentMapCacheManager
- CompositeCacheManager
- EhCacheCacheManagerSpring 3.2引入了另外一个缓存管理器,这个管理器可以用在基于JCach e(JSR-107)的缓存提供商之中。除了核心的Spring框架,Spring Data又提供了两个缓存管理器:
- RedisCacheManager(来自于Spring Data Redis项目)
- GemfireCacheManager(来自于Spring Data GemFire项目)
2. Spring 缓存使用
2.1 注解方式
@Cacheable
说明: 表明Spring在调用方法之前,首先应该在缓存中查找方法的返回值。如果这个值能够找到,就会返回缓存的值。否则的话,这个方法就会被调用,返回值会放到缓存之中
@CachePut
说明: 表明Spring应该将方法的返回值放到缓存中。在方法的调用前并不会检查缓存,方法始终都会被调用
参数 | 作用 | 例 (@Cacheable和@CachePut) |
---|---|---|
value | 缓存的名称,在spring 配置文件中定义,必须指定至少一个 | @Cacheable(value=”mycache”) @Cacheable(value={”cache1”,”cache2”} |
key | 缓存的key,可以为空,如果指定要按照SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 | @Cacheable(value=”testcache”,key=”#userName”) |
condition | 缓存的条件,可以为空,使用SpEL编写,返回true或者false只有为true才进行缓存 | @Cacheable(value=”testcache”,condition=”#userName.length()>2”) |
unless | SpEL表达式,可以为空,如果得到的值是true的话,返回值不会放到缓存之中 |
@CacheEvict
说明: 表明Spring应该在缓存中清除一个或多个条目
参数 | 作用 | 例 @CacheEvict) |
---|---|---|
value | 缓存的名称,在spring 配置文件中定义,必须指定至少一个 | @CacheEvict(value=”mycache”) @Cacheable(value={”cache1”,”cache2”} |
key | 缓存的key,可以为空,如果指定要按照SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 | @CachEvict(value=”testcache”,key=”#userName”) |
condition | 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才清空缓存 | @CachEvict(value=”testcache”,condition=”#userName.length()>2”) |
allEntries | 是否清空所有缓存内容,缺省为 false, |