Spring Boot集成Redis优先推荐Lettuce客户端,需添加spring-boot-starter-data-redis依赖,默认启用Lettuce;如需切换Jedis则需排除Lettuce并引入jedis依赖,配置时Lettuce连接池可选而Jedis必须配置,操作推荐使用StringRedisTemplate或自定义RedisTemplate配合Jackson序列化支持对象存取。

在 Spring Boot 中集成 Redis 客户端,推荐优先使用 Lettuce(Spring Boot 2.0+ 默认客户端),它基于 Netty、线程安全、支持响应式编程;Jedis 虽然轻量但连接非线程安全,需配合连接池使用。下面以主流方式说明如何配置和使用。
添加依赖(Maven)
只需引入 spring-boot-starter-data-redis,它默认内嵌 Lettuce:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>如需显式切换为 Jedis,排除 Lettuce 并加入 Jedis 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>配置 Redis 连接信息(application.yml)
基础配置对 Lettuce 和 Jedis 均适用,Spring Boot 会自动选择对应客户端:
立即学习“Java免费学习笔记(深入)”;
spring:
redis:
host: localhost
port: 6379
database: 0
password: # 可选
timeout: 2000
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: -1ms
# 若用 Jedis,替换为 jedis 配置块:
# jedis:
# pool:
# max-active: 8
# max-idle: 8
# min-idle: 0
# max-wait: -1ms注意:Lettuce 的连接池是可选的(默认使用共享连接),但在高并发场景建议启用;Jedis 必须配置连接池才能安全使用。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
使用 RedisTemplate 或 StringRedisTemplate
Spring Data Redis 提供了封装好的操作模板,无需手动管理连接:
-
StringRedisTemplate:专用于字符串键值操作,序列化器默认为
StringRedisSerializer,适合存取 JSON、纯文本等 -
RedisTemplate:泛型更灵活,但需自行配置 key/value 的序列化器(如
Jackson2JsonRedisSerializer)才能存对象
示例(注入并使用):
@Autowired
private StringRedisTemplate stringRedisTemplate;
<p>public void saveUser() {
stringRedisTemplate.opsForValue().set("user:1001", "{\"name\":\"Alice\",\"age\":30}");
stringRedisTemplate.expire("user:1001", Duration.ofMinutes(30));
}自定义 RedisTemplate(支持对象存取)
若需直接存 Java 对象(如 User 类),建议配置带 Jackson 序列化的 RedisTemplate<String, Object>:
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
<pre class='brush:java;toolbar:false;'>// 使用 String 序列化 key
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
// 使用 JSON 序列化 value
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
template.setValueSerializer(serializer);
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;}
之后即可:
redisTemplate.opsForValue().set("user:1002", new User("Bob", 28));不复杂但容易忽略的是序列化配置和连接池参数调优——尤其上线前务必根据实际 QPS 和内存限制调整 max-active、max-wait 等值。

















