springboot缓存管理
常用注解属性
Chahe缓存支持的SpEL表达式
常用注解
@EnableCaching
@EnableCaching注解用于开启基于注解的缓存支持。该注解需要配置在类上(在Spring Boot中,通常配置在项目启动类或配置类上)
@Cacheable
@Cacheable注解用于对方法结果进行缓存存储,可以作用于类或方法(通常用在数据查询方法上)
执行顺序:先进行缓存查询,若已有缓存的数据则直接使用缓存数据,否则进行方法查询,并将结果进行缓存
必须声明value的值
@CachePut
@CachePut注解作用是更新缓存数据,可以作用于类或方法(通常用在数据更新方法上)
执行顺序:先进行方法调用,然后将方法结果更新到缓存中。
@CacheEvict
@CacheEvict注解作用是删除缓存数据,可以作用于类或方法(通常用在数据删除方法上)
执行顺序:先进行方法调用,然后将缓存进行清除。
@CacheEvict注解也提供了多个属性,这些属性与@Cacheable注解的属性基本相同除此之外,还额外提供了两个特殊属性allEntries和beforelnvocation.
@Caching
@Caching注解用于针对复杂规则的数据缓存管理,可以作用于类或方法。
在@Caching注解内部包含有cacheable、put和evict三个属性,分别对应于@Cacheable@CachePut和@CacheEvict三个注解
@CacheConfig
@CacheConfig注解使用在类上,主要用于统筹管理类中所有使用@Cacheable、@CachePut和@CacheEvict注解标注方法中的公共属性,这些公共属性包括有cacheNames、keyGeneratorcacheManager和cacheResolver。
redis缓存
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
不需编写对应版本号信息,其版本号信息由Spring Boot统一管理
redis中间件连接配置
Redis配置类
package com.librarymanagement.config;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
if (redisProperties.getTimeToLive() != null) {
config = config.entryTtl(redisProperties.getTimeToLive());
}
if (redisProperties.getKeyPrefix() != null) {
config = config.prefixKeysWith(redisProperties.getKeyPrefix());
}
if (!redisProperties.isCacheNullValues()) {
config = config.disableCachingNullValues();
}
if (!redisProperties.isUseKeyPrefix()) {
config = config.disableKeyPrefix();
}
return config;
}
}