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);
分类:
后端 / SpringBoot
, 后端 / redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2023-10-14 CSS制作逼真的波浪效果
2021-10-14 Python | P站壁纸爬取
2021-10-14 Conda 创建和删除虚拟环境