springboot配置redis
文章目录
- 前置
- 依赖配置
- yml 配置
- 自定义配置(非必要)
- 正常使用
前置
你使用的是 springboot 项目,使用 yml 来进行配置,properties 同理
依赖配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
这个依赖会自动引入:
spring-data-redis(Spring Data Redis 核心库)
lettuce-core(默认的 Redis 客户端,基于 Netty 的高性能客户端)
yml 配置
有 3 大 redis 客户端:Jedis、Redisson、Lettuce,其中在 spring boot2 之后,redis连接默认就采用了 lettuce
spring:
redis:
host: localhost # Redis 服务器地址
port: 6379 # Redis 服务器端口,默认是 6379
password: # Redis 密码(如果没有密码,可以省略)
database: 0 # 使用的数据库索引,默认是 0
timeout: 2000 # 连接超时时间(毫秒)
lettuce:
pool:
max-active: 8 # 连接池最大连接数
max-idle: 8 # 连接池最大空闲连接数
min-idle: 0 # 连接池最小空闲连接数
max-wait: -1ms # 连接池最大阻塞等待时间(-1 表示无限制)
自定义配置(非必要)
配置完成 yml 后,你无需再配置 RedisTemplate 和 StringRedisTemplate 的 Configuration 代码了,因为 Spring Boot 会自动配置 RedisTemplate 和 StringRedisTemplate,你可以直接注入它们来操作 Redis
但是如果你非要自己在做额外的配置,那么你可以写如下这样的代码:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
// 使用GenericJackson2JsonRedisSerializer来序列化和反序列化redis的value值
GenericJackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer<>();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
正常使用
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
// 存储数据
public void setValue(String key, String value) {
stringRedisTemplate.opsForValue().set(key, value);
}
// 获取数据
public String getValue(String key) {
return stringRedisTemplate.opsForValue().get(key);
}
// 存储对象
public void setObject(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
// 获取对象
public Object getObject(String key) {
return redisTemplate.opsForValue().get(key);
}
}