使用StringRedisSerializer存储哈希值时,我遇到了ClassCastException异常。如果删除非字符串字段' age',则可以将其存储到redis中。
Demo demo = new Demo();
demo.setName("DemoCache_jsonSerializer");
// non-string field
demo.setAge(111);
// set stringSerializer
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
//exception here: java.lang.Integer cannot be cast to java.lang.String
redisTemplate.opsForHash().putAll("testKey",
mapper.toHash(demo));
我知道如果我改为jsonserializer它会起作用,但我的问题是 如何使它与StringRedisSerializer一起使用,并能够存储具有非字符串字段的对象
答案 0 :(得分:2)
使用StringRedisSerializer
,您只能将String
转换为byte[]
,将byte[]
转换为String
。
要使其与StringRedisSerializer
一起使用,请将所有对象转换为String
,以覆盖toString()
。但我想这可能是一个糟糕的设计。
请查看以下链接:Source Code和Documentation您可能会发现有用的内容。
答案 1 :(得分:0)
@Bean
public RedisTemplate<String, Object> redisTemplate() {
final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(jedisConnectionFactory());
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
template.afterPropertiesSet();
return template; }