Spring Boot 集成 Redis 实现数据缓存
共 11689字,需浏览 24分钟
·
2020-08-06 14:32
Spring Boot 集成 Redis 实现数据缓存,只要添加一些注解方法,就可以动态的去操作缓存了,减少代码的操作。
在这个例子中我使用的是 Redis,其实缓存类型还有很多,例如 Ecache、Mamercache、Caffeine
等。
Redis 简介
Redis 是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。
Redis 相关的知识就不在这里赘述了,感兴趣的可以公众号回复 Redis
看下 Redis 系列文章。
下面我们在 Spring Boot 中集成 Redis 来实现数据缓存。
Spring Boot 集成 Redis 实现缓存
Spring Boot 集成 Redis 实现缓存主要分为以下三步:
-
加入 Redis 依赖 -
加入 Redis 配置 -
演示 Redis 缓存
加入依赖
首先创建一个项目,在项目中加入 Redis 依赖,项目依赖如下所示(由于使用 Redis 连接池,需额外引入 commons-pool2
):
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-redis
org.apache.commons
commons-pool2
在 spring-boot-starter-data-redis
1.X 版本默认使用 Jedis 客户端,在 2.X 版本默认开始使用 Lettuce 客户端,如果习惯使用 Jedis 的话,可以从 spring-boot-starter-data-redis
中排除 Lettuce 并引入 Jedis。
加入配置
在配置文件 application.properties
中配置 Redis 的相关参数,具体内容如下:
#Redis 索引(0~15,默认为 0)
spring.redis.database=0
spring.redis.host=127.0.0.1
#Redis 密码,如果没有就默认不配置此参数
spring.redis.password=
spring.redis.port=6379
#Redis 连接的超时时间
spring.redis.timeout=1000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=10
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
接下来在 config
包下创建一个 Redis 配置类 RedisConfig
,在配置类上加入注解 @Configuration
,注入一个 CacheManager
来配置一些相关信息,代码如下:
@Configuration
public class RedisConfig {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(30))
.prefixKeysWith("cache:user:")
.disableCachingNullValues()
.serializeKeysWith(keySerializationPair())
.serializeValuesWith(valueSerializationPair());
return RedisCacheManager.builder(factory)
.withCacheConfiguration("user", redisCacheConfiguration).build();
}
private RedisSerializationContext.SerializationPair
keySerializationPair
()
{
return RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer());
}
private RedisSerializationContext.SerializationPair