Skip to content

Commit b4e9274

Browse files
committed
feat: 使用 Spring 项目 jackson 配置创建 RedisTemplate 序列化
1 parent a21a0fe commit b4e9274

2 files changed

Lines changed: 32 additions & 16 deletions

File tree

common/plugin/cache/src/main/java/top/cadecode/uniboot/common/plugin/cache/config/CacheConfig.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ public CacheManager caffeineCacheManager5s() {
5555
* @return RedisCacheManager 实例
5656
*/
5757
@Bean(name = CacheConfig.RCM_5M)
58-
public CacheManager redisCacheManager5m(RedisTemplate<String, ?> jsonRedisTemplate) {
59-
return geneRedisCacheManager(jsonRedisTemplate, 5);
58+
public CacheManager redisCacheManager5m(RedisTemplate<String, Object> redisTemplate) {
59+
return geneRedisCacheManager(redisTemplate, 5);
6060
}
6161

6262
/**
@@ -67,16 +67,16 @@ public CacheManager redisCacheManager5m(RedisTemplate<String, ?> jsonRedisTempla
6767
*/
6868
@Primary
6969
@Bean(name = CacheConfig.RCM_30M)
70-
public CacheManager redisCacheManager30m(RedisTemplate<String, ?> jsonRedisTemplate) {
71-
return geneRedisCacheManager(jsonRedisTemplate, 30);
70+
public CacheManager redisCacheManager30m(RedisTemplate<String, Object> redisTemplate) {
71+
return geneRedisCacheManager(redisTemplate, 30);
7272
}
7373

74-
private static RedisCacheManager geneRedisCacheManager(RedisTemplate<String, ?> jsonRedisTemplate, long minutes) {
74+
private static RedisCacheManager geneRedisCacheManager(RedisTemplate<String, Object> redisTemplate, long minutes) {
7575
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
76-
.serializeKeysWith(SerializationPair.fromSerializer(jsonRedisTemplate.getStringSerializer()))
77-
.serializeValuesWith(SerializationPair.fromSerializer(jsonRedisTemplate.getValueSerializer()))
76+
.serializeKeysWith(SerializationPair.fromSerializer(redisTemplate.getStringSerializer()))
77+
.serializeValuesWith(SerializationPair.fromSerializer(redisTemplate.getValueSerializer()))
7878
.entryTtl(Duration.ofMinutes(minutes));
79-
return RedisCacheManager.builder(jsonRedisTemplate.getConnectionFactory())
79+
return RedisCacheManager.builder(redisTemplate.getConnectionFactory())
8080
.cacheDefaults(cacheConfiguration)
8181
.transactionAware()
8282
.build();
Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package top.cadecode.uniboot.common.plugin.cache.config;
22

3+
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
36
import lombok.RequiredArgsConstructor;
47
import org.springframework.context.annotation.Bean;
58
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Primary;
610
import org.springframework.data.redis.connection.RedisConnectionFactory;
711
import org.springframework.data.redis.core.RedisTemplate;
812
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
13+
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
914
import org.springframework.data.redis.serializer.RedisSerializer;
15+
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
1016

1117
/**
1218
* Redis 配置类
@@ -18,25 +24,35 @@
1824
@Configuration
1925
public class RedisConfig {
2026

21-
private final RedisConnectionFactory factory;
22-
2327
@Bean
24-
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
28+
RedisMessageListenerContainer container(RedisConnectionFactory factory) {
2529
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
26-
container.setConnectionFactory(connectionFactory);
30+
container.setConnectionFactory(factory);
2731
return container;
2832
}
2933

34+
/**
35+
* 全局默认 RedisTemplate
36+
* key string, val json
37+
*/
38+
@Primary
3039
@Bean
31-
public RedisTemplate<String, ?> jsonRedisTemplate() {
32-
RedisTemplate<String, ?> template = new RedisTemplate<>();
40+
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory, Jackson2ObjectMapperBuilder builder) {
41+
// 创建 ObjectMapper,并复用 Spring 项目配置
42+
ObjectMapper objectMapper = new ObjectMapper();
43+
builder.configure(objectMapper);
44+
// 启用序列化类型
45+
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), DefaultTyping.NON_FINAL, As.PROPERTY);
46+
// 创建 Redis Jackson 序列化器
47+
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);
48+
RedisTemplate<String, Object> template = new RedisTemplate<>();
3349
template.setConnectionFactory(factory);
3450
// 设置 k v 的序列化方式
3551
template.setKeySerializer(RedisSerializer.string());
36-
template.setValueSerializer(RedisSerializer.json());
52+
template.setValueSerializer(jsonRedisSerializer);
3753
// 设置 hash k v 的序列化方式
3854
template.setHashKeySerializer(RedisSerializer.string());
39-
template.setHashValueSerializer(RedisSerializer.json());
55+
template.setHashValueSerializer(jsonRedisSerializer);
4056
return template;
4157
}
4258
}

0 commit comments

Comments
 (0)