RedisTemplate SerializationFailedException: Failed to deserialize payload 异常解决
问题:SpringDateRedis中使用RedisTemplate进行批量命令发送使用Pipeline进行存储,再次使用RedisTemplate进行获取,获取不到对应的文件信息。
- SpringDataRedis中如何使用Pipeline进行批量的命令发送(其他具体操作可以参照对应Spring官网进行学习:点击跳转
List<String> verificationcodes = new ArrayList<>();
verificationcodes.add("a");
verificationcodes.add("b");
verificationcodes.add("c");
redisTemplate.executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
List<String> verificationcodes = new ArrayList<>();
for (String vcode : verificationcodes) {
connection.setCommands().sAdd("code".getBytes(), vcode.getBytes());
}
return null;
}
});
通过下面的代码是无法获取相应的key值对应的信息
//检查code对应的value是否存在
Boolean member = redisTemplate.opsForSet().isMember("code".getBytes(), "a".getBytes());
if(!member){
System.out.println("随机码已使用或不存在");
}else{
System.out.println("验证码a已使用");
}
问题解析:
存储key时对应的byte对应的byte值
获取key时,对应的byte的值
问题的关键出在了rawKey中,进入方法一探究竟
解决方法就是在设置redisTemplate的key的序列化设置为空
没有返回值的情况下,这样是没有问题的,但是有返回值的情况下,则会出现序列化错误。
RedisTemplate SerializationFailedException: Failed to deserialize payload 异常解决
对应问题请参照相应的博客信息:点击链接