?前言
Spring Boot 3.4.x作為當前?最新穩定版本?,全面支持Java 17+與Jakarta EE 10規范。本文以?Spring Boot 3.4.1?和?Redis 7.x?為例,詳解如何在IDEA中快速接入Redis,涵蓋?最新依賴配置?、?數據序列化優化?、?緩存注解?及?高版本常見問題排查?,助你掌握企業級緩存方案!
?一、環境要求
1. ?基礎環境
- JDK 17+(推薦OpenJDK 17/21)
- IntelliJ IDEA 2023.1+
- Redis 7.x(官網下載)
2. ?項目初始化
- 使用Spring Initializr創建項目,選擇:
- Spring Boot 3.4.x
- 依賴項:
Spring Web, Spring Data Redis, Lombok
二、依賴配置(Spring Boot 3.4.x+特性)
?1. pom.xml關鍵依賴
<!-- Spring Boot 3.4.x 父工程 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.1</version>
</parent><!-- Redis Starter(默認Lettuce) -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!-- Jakarta JSON處理(兼容Redis序列化) -->
<dependency><groupId>jakarta.json</groupId><artifactId>jakarta.json-api</artifactId><version>2.1.2</version>
</dependency>
<dependency><groupId>org.glassfish</groupId><artifactId>jakarta.json</artifactId><version>2.0.1</version>
</dependency>
?注?:Spring Boot 3.4.x默認使用?Lettuce 6.3.x?,無需額外配置連接池。若需Jedis,需手動排除Lettuce并添加Jedis依賴。
?三、Redis連接配置
1. application.yml(推薦格式)
spring:data:redis:host: localhostport: 6379password: # 無密碼留空database: 0lettuce:pool:max-active: 8max-idle: 4min-idle: 0max-wait: 2000ms# 新版本支持客戶端名稱(監控識別)client-name: springboot-app
?2. 自定義序列化(解決Jackson兼容性問題)
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// Key使用String序列化template.setKeySerializer(RedisSerializer.string());// Value使用JSON序列化(適配Jakarta)template.setValueSerializer(buildJsonSerializer());return template;}private RedisSerializer<Object> buildJsonSerializer() {ObjectMapper mapper = new ObjectMapper();mapper.registerModule(new JavaTimeModule());mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.EVERYTHING,JsonTypeInfo.As.PROPERTY);return new GenericJackson2JsonRedisSerializer(mapper);}
}
?四、緩存注解實戰(適配Spring 6.x+)
?1. 啟用緩存
@SpringBootApplication
@EnableCaching
public class DemoApplication { ... }
?2. 服務層緩存示例
@Service
@CacheConfig(cacheNames = "userCache")
public class UserService {@Autowiredprivate UserRepository repository;// 使用SpEL動態生成Key@Cacheable(key = "#id + '_' + #type")public User getUser(Long id, String type) {return repository.findById(id).orElseThrow();}// 條件緩存(僅緩存長度>5的名稱)@Cacheable(key = "#name", condition = "#name.length() > 5")public User getUserByName(String name) {return repository.findByName(name);}// 事務性緩存更新(結合@Transactional)@Transactional@CachePut(key = "#user.id")public User updateUser(@NonNull User user) {return repository.save(user);}
}
?五、響應式Redis操作(可選)
?1. 添加響應式依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
?2. 響應式模板使用
@Autowired
private ReactiveRedisTemplate<String, Object> reactiveTemplate;public Mono<Boolean> saveSession(String sessionId, User user) {return reactiveTemplate.opsForValue().set("session:" + sessionId, user, Duration.ofMinutes(30));
}
?六、常見問題與解決方案
?Q1:Jackson序列化失敗(Jakarta兼容性問題)
- 現象?:
InvalidTypeIdException: Missing type id when trying to resolve subtype
- ?解決?:
- 確認添加了
jakarta.json
依賴。 - 在
RedisConfig
中顯式配置ObjectMapper
(參考上文)。
- 確認添加了
?Q2:Redis連接池不生效
- 原因?:Spring Boot 3.4.x默認啟用Lettuce連接池,無需額外配置。
- ?驗證?:通過
/actuator/metrics/redis.pool.active
端點監控連接狀態。
?Q3:Spring Boot 3.4.x與Redis 7.x的TLS連接
- ?配置?:
spring:data:redis:url: rediss://localhost:6379 # SSL協議ssl: trueclient-type: lettucelettuce:pool:enabled: truessl:key-store-type: PKCS12key-store: classpath:keystore.p12key-store-password: 123456
總結
Spring Boot 3.4.x在Redis集成上進一步優化了性能與兼容性,支持最新的Jakarta標準和響應式編程。本文從?依賴配置?到?高級特性?,提供了一套完整的生產級解決方案。