redis Lua 脚本 返回的数据 无法序列化

https://www.cnblogs.com/echohye/p/18464302

问题

如果我需要获取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 脚本 返回的数据 无法序列化

posted @   槑孒  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2023-10-14 CSS制作逼真的波浪效果
2021-10-14 Python | P站壁纸爬取
2021-10-14 Conda 创建和删除虚拟环境
点击右上角即可分享
微信分享提示