我正在使用Spring / Redis / Jedis来创建一个简单的消息队列系统。我使用Strings提出了一个简单的测试用例,但由于某种原因,字符串会被损坏。我最初尝试使用POJO,但也有腐败,所以我认为只是简单的字符串可以工作,但到目前为止还没有运气。
当我使用redis-cli并订阅频道时,它显示的原始数据是
1) "message"
2) "test"
3) "\xac\xed\x00\x05t\x00\x03wee"
这是我的示例代码
@Service
public class MessageService {
@Autowired private RedisTemplate<String, String> testTemplate;
@Bean
RedisMessageListenerContainer container(JedisConnectionFactory jedisConnectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(jedisConnectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("test"));
return container;
}
@Bean
MessageListenerAdapter listenerAdapter() {
return new MessageListenerAdapter(this, "receiveMessage");
}
public void sendMessage(){
TestObject message = new TestObject();
message.test = 5;
testTemplate.convertAndSend("test", "wee");
}
public void receiveMessage(String testObject) {
System.out.println("I got a message " + testObject);
}
}
receieveMessage的输出为I got a message ?? t wee
,有两个字符无法在stackoverflow中显示,其中空格位于&#39; t&#39;之前和之后。
有关造成这种腐败的原因的任何想法?
答案 0 :(得分:0)
@Bean
public RedisTemplate<String,String> redisTemplate() {
final RedisTemplate<String,String> redisTemplate = new RedisTemplate<String,String>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new GenericToStringSerializer<>(Object.class));
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(jedisConnectionFactory());
return redisTemplate;
}
您的RedisTemplate值序列化器应为StringRedisSerializer。将此conf用于RedisTemplate。