Files
webgame-backend/src/main/java/com/webgame/webgamebackend/common/config/RedisConfigurer.java
2026-06-16 16:02:09 +08:00

52 lines
2.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.webgame.webgamebackend.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis 配置类:序列化方式 + 消息监听容器
*/
@Configuration
public class RedisConfigurer {
/**
* 配置 RedisTemplate使用 String 序列化器替代 Java 原生序列化
* <p>
* 不配置此项的话Spring Boot 默认使用 JdkSerializationRedisSerializer
* 存入 Redis 的数据会带有 Java 序列化魔数前缀(\xAC\xED\x00\x05
* 导致人类不可读且无法被其他语言客户端读取。
*/
@Bean
@Primary
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
StringRedisSerializer stringSerializer = new StringRedisSerializer();
template.setKeySerializer(stringSerializer);
template.setValueSerializer(stringSerializer);
template.setHashKeySerializer(stringSerializer);
template.setHashValueSerializer(stringSerializer);
template.afterPropertiesSet();
return template;
}
/**
* 创建并配置 Redis 消息监听容器
* 用于实现 Redis 的发布/订阅功能,支持监听特定频道的消息
*
* @param redisConnectionFactory Redis 连接工厂
* @return 配置好的 RedisMessageListenerContainer 实例
*/
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
return container;
}
}