Redis Lua脚本返回表格和解析对象
2018-2-26 11:29:26
收藏:0
阅读:85
评论:2
我有一个问题,
local searchkey=@searchkey
local blockKeys = redis.call('keys', searchkey)
local table = {}
for i = 0, #blockKeys, 1 do
local seats = redis.call('HVALS', blockKeys[i])
table[i] = seats
end
return table
我想解析这个表格数据到.net obj中
我使用了StackExchange.Redis库和lua返回了RedisResult,但是lua表格数据无法解析为RedisValue[]
有没有人有主意?
点赞
用户2198985
将下面翻译成中文并且保留原本的 markdown 格式,
var asMulti = (RedisResult[])val;
foreach (var item in asMulti)
{
var asd = (RedisValue[])item;
}
我的脚本返回一个表格,我认为这是 RedisResult[],并且在对象内部 所以设计成
"key, { {key, obj}, {key, obj}}"
```
2018-02-26 12:55:14
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

RedisResult是一种通用的包装器,用于未知形状的数据。有操作符可让您以多种方式解释数据,例如:RedisResult val = ... // 简单 int asInt = (int)val; // 一个整数 string asString = (string)val; // 一个字符串 string[] asStrings = (string[])val; // 一组字符串 double[] asDoubles = (double[])val; // 一组 double // 更为结构化 var asKeys = (RedisKey[])val; // 一组键 var asValues = (RedisValue[])val; // 一组值 var asMulti = (RedisResult[])val; // 一组通用值所以你可以将其可能转换为需要的类型。但是:在脚本中使用
KEYS是一个大问题,您应该真正改变它。回答评论中的问题:
引用来自redis文档:
每个redis实例都带有一个用于服务请求的单线程核心。
KEYS在小型数据库上看起来还可以,但是_有或没有过滤器_的性能都是O(N),其中N是数据库中键的总数,对于大型系统:它可能是_灾难性的_,意味着:需要花费10秒才能返回。通常,redis操作预计最多需要_MPI_coefficient.毫秒时间_,而您的KEYS操作运行时:什么都不能干。它_完全_阻止服务器在该期间的核心。您指出,
KEYS比SCAN更高效,在某些情况下是正确的。SCAN的整个观点是它允许您将操作作为(潜力很大的)一系列_小批量_-"扫描前100个;现在从那里扫描下一个100个; 接下来的100个"。这有很多开销和延迟,并涉及更多的往返到服务器,但好处是它不会为单个巨大时间块阻止服务器核心。然而!通常,更好的方法是使用一个与您的数据匹配的_集合_。假设您有一个大型数据库,您对所有
/foo/{whatever}数据都感兴趣。现在;而不是使用KEYS或SCAN查找这些值,_如果需要_迭代该系列中的所有键,则可以将所有键放入集合中。所以当您创建/foo/abc时,您还会通过sadd将/foo/abc放入集合/foo/_keys(或者其他什么;这里没有公约)。现在:要迭代该系列中的所有键,您只需迭代集合/foo/_keys- 这是一个_更为恰当的API_。