redis Lua 脚本 返回的数据 无法序列化
问题
如果我需要获取Hash类型的所有键值,应该怎么获取呢
cmd = "redis.call('HGETALL', key)"
如果是直接使用以上命名,将会直接报序列化失败
(我这里的redis是使用FastJson2JsonRedisSerializer进行序列化)
redis存储的数据内容
目前,我觉得原因就是序列化的时候,类型转换错误
因为lua语言对于查询hash数据返回的是一个数组,如{"accuracy",156,"inaccuracy",0},在json进行序列化是,很明显一个文本一个整数,自然就报错了
解决办法
使用cjson.encode将返回的数据全部转化为字符串,然后通过java遍历生成对应类型数据
// Lua脚本:批量获取所有传入keys的值
String luaScript = "local result = {} " +
"for i, key in ipairs(KEYS) do " +
" local value = " + cmd +
" result[i] = value " +
"end " +
// "return result";
"return cjson.encode(result)";
// 处理 Lua 脚本的返回值
List<E> finalResult = new ArrayList<>();
// 将 List 转换为 HashMap
List<Object> hashList = (List<Object>) value;
Map<String, String> map = new HashMap<>();
for (int i = 0; i < hashList.size(); i += 2) {
map.put((String) hashList.get(i), (String) hashList.get(i + 1));
}
finalResult.add((E) map);
redis Lua 脚本 返回的数据 无法序列化