SpringCache
Spring提供的统一缓存的技术
可以通过简单的注解实现缓存
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
我们如果需要使用Redis进行缓存需要先配置RedisCacheManager
否则使用的是默认的SimpleCacheManager实现
配置
@Bean
public RedisCacheManager cacheManagerForever(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(JACKSON_SERIALIZER));
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.transactionAware()
.build();
}
@EnableCaching
添加在启动类上开启缓存
@Cacheable
针对方法,如果缓存中存在就返回缓存,如果没有就执行方法对方法的返回值进行缓存
value:缓存名,指定缓存在哪块命名空间存放
cacheNames:同value
key:可选属性,可以使用Spel标签自定义缓存key
eg:REDIS_CACHE_KEY::#{id}
condition:缓存条件,符合条件才会缓存
cacheManager:之前配置的cachemanager
@CachePut
每次都会触发方法调用,根据返回值更新缓存数据
value:缓存名,指定缓存在哪块命名空间存放
cacheNames:同value
key:可选属性,可以使用Spel标签自定义缓存key
eg:REDIS_CACHE_KEY::#{id}
condition:缓存条件,符合条件才会缓存
cacheManager:之前配置的cachemanager
@CacheEvict
根据一定的条件对缓存进行清空
value:缓存名,指定缓存在哪块命名空间存放
cacheNames:同value
key:可选属性,可以使用Spel标签自定义缓存key
eg:REDIS_CACHE_KEY::#{id}
condition:缓存条件,符合条件才会缓存
cacheManager:之前配置的cachemanager
allEntries:如果为true代表调用方法后清空所有缓存
@Caching
在一个方法或者类上指定多个Spring Cache相关的注解
@Caching(
evict={@CacheEvict()},
put={@CachePut()},
cacheable={@Cacheable()}
)
@CacheConfig
在类上统一指定缓存注解中的一些属性
包括value,keyGenerator等