SpringBoot中集成Redis
1. Redis
Redis作为非关系型数据库,在项目开发中被大量的使用,尤其是作为数据的缓存来保证请求数据的快速响应,提升服务的用户体验。
今天就来学习一下Spring Boot项目中如何集成Redis作为缓存数据库。
1.1 引入Redis相关依赖
SpringBoot中对Redis的集进行了封装,提供了Spring Data Redis框架支持,Spring Data Redis在底层Spring的架构中定义与Redis数据库交互的逻辑,用户在使用时不需要关心如何管理,只需要在应用程序层面去操作Redis。
使用时需要引starter-data-redis依赖:
<!-- redis依赖信息 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
1.2 依赖包含信息
依赖引入后,可以看到maven projects中相关的依赖包信息,其中包括了spring-data-redis和lettuce-core两个依赖包。
spring-data-redis
包含了Spring对data处理的一些公共包lettuce-core
包是starter-data-redis中对lettuce的默认支持
1.3 Jedis客户端依赖
如果需要使用Jedis来操作Redis,只需要将lettuce的依赖替换为Jedis即可。
<!--导入jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2. Redis配置
Spring Boot在org.springframework.boot.autoconfigure.data.redis
包中为redis提供了自动配置。其中定义有:
RedisAutoConfiguration
自动配置类RedisProperties
Redis属性信息读取类RedisConnectionConfiguration
连接配置基类JedisConnectionConfiguration
,Jedis连接配置类LettuceConnectionConfiguration
,Lettuce连接配置类
2.1 配置文件中定义Redis信息
有了RedisProperties
,并于Spring Boot配置文件中定义Redis相关属性后,就会在项目启动时会注入到Redis中去。Redis可以自定义的配置项内容有:
# Redis配置项,以spring.redis为前缀
# 数据库索引(默认为0)
spring.redis.database=0
# 服务器地址
spring.redis.host=127.0.0.1
# 端口
spring.redis.port=6379
# 密码(默认为空,为空时不设置该属性)
spring.redis.password=redis
# 超时时间(毫秒)
spring.redis.timeout=30000
# 建议使用lettuce 可以换成jedis,spring默认集成lettuce
spring.redis.client-type=lettuce
# 如果使用jedis客户端,则下面定义的内容需要将lettuce换成jedis
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=10
# 最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-2
# 最大空闲连接数
spring.redis.lettuce.pool.max-idle=10
# 最小空闲连接
spring.redis.lettuce.pool.min-idle=0
2.2 自定义Redis配置类
前面说到spring中为redis定义了专门的RedisAutoConfiguration
自动配置类,其中定义创建泛型为<Object, Object>
的RedisTemplate对象,为了允许自定义配置Bean,自动配置类使用@ConditionalOnMissingBean注解,表示当其他地方定义一个RedisTemplate的Bean时,会替代自动配置中的结果。
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
return new StringRedisTemplate(redisConnectionFactory);
}
}
为了使用操作更方便,我们定义一个<String, Object>
泛型的RedtTemplate,这样对于数据的存放和读取都更合适。
- RedisTemplate序列化默认是采用JDK的序列化策略,可以在配置类中设置为其他策略
//自定义RedisConfig
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
//采用String的序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
// value序列化方式采用jackson
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
3. 使用Redis
3.1 SpringBoot项目使用Redis
在项目中配置Redis完成后,直接执行项目即可,运行时需要注意在配置文件中定义的Redis信息是否正确,如果Redis无法连接则项目启动报错。
- 服务器地址要时Redis运行的服务地址,如果是本地则为
127.0.0.1
- 设置Redis启动的端口号,默认是6379
- Redis连接密码即服务器中启动Redis服务的密码,如果没有密码则不要配置该属性,否则也会报错
项目成功启动后,为了验证Redis是否可用,可以在单元测试中使用redisTemplate来存储和获取数据到redis中。
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedis(){
ValueOperations<String, String> operations = redisTemplate.opsForValue();
operations.set("name", "tom");
System.out.println(operations.get("name"));
}
执行单元测试后输出存储的tom值,说明数据已经存储在Redis中了。
3.2 Windows下安装Redis
如果还没有安装Redis服务,或者想要在Redis服务中查看存入的数据,可以参照windows本地Redis服务的创建方法。
Redis官方并不建议在Windows下使用Redis,因此没有提供windows版本,而微软官方却为windows用户提供了可用的redis应用。
windows下Redis版本 ,下载时可以选择安装包或免安装版本。
下载安装完成后得到Redis目录,可以使用其中的redis-server和redis-cli程序来运行redis
- redis-server作为服务端,启动后开启命令行来运行redis服务
- redis-cli作为客户端,可以执行redis相关命令查看和存储数据
如果是免安装版,每次redis服务都在前台运行不够简洁,还可以通过windows命令行将redis-server设置为后台启动。相关命令有:
- 将redis程序解压后放到合适的位置
- 打开一个命令窗口,进入到解压目录,输入命令:
redis-server redis.windows.conf
- 再打开一个新的命令窗口,输入命令:
redis-server --service-install redis.windows.conf
- 这样就可以将redis部署为windows下的一个服务
- 安装完成后,使用命令启动服务:
redis-server --service-start
- 如果想要停止或卸载redis服务,只需要执行相关命令
- 停止服务命令:
redis-server --service-stop
- redis的卸载命令:
redis-server --service-uninstall
- 停止服务命令:
进入redis客户端后,可以使用redis命令来查看存储的数据:
转载自:https://juejin.cn/post/7035272968762556452