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 会自动选择对应客户端:
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 必须配置连接池才能安全使用。
使用 RedisTemplate 或 StringRedisTemplate
Spring Data Redis 提供了封装好的操作模板,无需手动管理连接:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
-
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));
}</p>自定义 RedisTemplate(支持对象存取)
若需直接存 Java 对象(如 User 类),建议配置带 Jackson 序列化的 RedisTemplate<string object></string>:
@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 等值。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










