文章目录
spring cache采用redis的缓存方式
1.简介
spring cache结合spring boot中的注解使用,能够缓存方法的返回值,缓存未变的情况下代替执行方法直接去读取缓存,提高处理速度。
2.相关注解
(1)@CacheConfig:主要用于配置该类中会用到的一些共用的缓存配置,常用于配置缓存的集合名。
(2)@Cacheable:主要方法返回值加入缓存。同时在查询时,会先从缓存中取,若不存在才再发起对数据库的访问。
(3)@CachePut:配置于函数上,能够根据参数定义条件进行缓存,与@Cacheable不同的是,每次会真实调用函数,所以主要用于数据新增和修改操作上。
(4)@CacheEvict:配置于函数上,通常用在删除方法上,用来从缓存中移除对应数据
(5)@Caching:配置于函数上,组合多个Cache注解使用。
3.使用
3.1添加redis的maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 排除lettuce包,使用jedis代替-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- apache对redisTemplate的封装类-->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-redis</artifactId>
<version>3.4.3</version>
</dependency>
3.2配置redis连接池
spring:
redis:
host: 127.0.0.1
port: 6379
password:
jedis:
pool:
min-idle: 10 #最小空闲连接数
max-idle: 20 #最大空闲连接数
max-active: 100 #最大连接数
max-wait: 10000 #最大等待时间
cache:
type: redis
redis:
# 缓存过期时间
time-to-live: 1d
# key是否使用前缀
use-key-prefix: true
3.3创建配置类
@Configuration
public class RedisConfiguration {
@Bean
public RedisClient redisClient(RedisTemplate redisTemplate){
//为key设置序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
//为value设置序列化器
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return new RedisClient(redisTemplate);
}
/**
* 申明缓存管理器,会创建一个切面(aspect)并触发Spring缓存注解的切点(pointcut)
*/
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//缓存配置对象
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) //设置key序列化器
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); //设置value序列化器
return RedisCacheManager. builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)).cacheDefaults(redisCacheConfiguration).build();
}
}
3.4启动类启用Cache
xxxApplication启动类添加注解@EnableCaching
3.5启用缓存
在需要缓存的方法使用@Cacheable,删除缓存的地方使用@CacheEvict
注意:缓存的对象需要实现Serializable接口
参考文档