草庐IT

函数参数的 Lua 表

我有一个使用格式的redis命令:red:msetnx(key1,val1,key2,val2,key3,val3,...)我想将它设置在一个函数后面,该函数接受一个键/值对表并通过red:msetnx()运行它——我如何将我的表重新格式化为交替键/value逗号分隔的参数列表并将其传递给函数? 最佳答案 创建一个按顺序排列键和值的表,并使用unpack传递它:args={'key1','val1','key2','val2','key3','val3'}red:msetnx(unpack(args))

函数参数的 Lua 表

我有一个使用格式的redis命令:red:msetnx(key1,val1,key2,val2,key3,val3,...)我想将它设置在一个函数后面,该函数接受一个键/值对表并通过red:msetnx()运行它——我如何将我的表重新格式化为交替键/value逗号分隔的参数列表并将其传递给函数? 最佳答案 创建一个按顺序排列键和值的表,并使用unpack传递它:args={'key1','val1','key2','val2','key3','val3'}red:msetnx(unpack(args))

redis - 这个处理 key 过期竞争条件的redis lua脚本是纯函数吗?

我一直在使用redis来跟踪分布式系统中外部api的速率限制。我决定为存在限制的每条路线创建一个key。key的值是在限制重置之前我仍然可以发出多少请求。并且通过将key的TTL设置为限制重置的时间来进行重置。为此,我编写了以下lua脚本:ifredis.call("EXISTS",KEYS[1])==1thenlocalremaining=redis.call("DECR",KEYS[1])ifremaining0then--[[--Wewouldexceedthelimitifweweretodoacallnow,solet'ssendbackthatalimitexists(1)

redis - 这个处理 key 过期竞争条件的redis lua脚本是纯函数吗?

我一直在使用redis来跟踪分布式系统中外部api的速率限制。我决定为存在限制的每条路线创建一个key。key的值是在限制重置之前我仍然可以发出多少请求。并且通过将key的TTL设置为限制重置的时间来进行重置。为此,我编写了以下lua脚本:ifredis.call("EXISTS",KEYS[1])==1thenlocalremaining=redis.call("DECR",KEYS[1])ifremaining0then--[[--Wewouldexceedthelimitifweweretodoacallnow,solet'ssendbackthatalimitexists(1)

redis - 为什么 nil 检查失败

我正在使用Lua查询redis并想检查是否有键不存在,但我对为什么我的代码不起作用感到困惑:localbulk=redis.call("HMGET",KEYS[1],"p1","p2")fori,vinipairs(bulk)doif(i==1)thenif(v==nil)thenreturnnil--Thisisneverenteredendendend但是下面的代码确实有效:localbulk=redis.call("HMGET",KEYS[1],"p1","p2")fori,vinipairs(bulk)doif(i==1)thenv=vor0if(v==0)thenreturn

redis - 为什么 nil 检查失败

我正在使用Lua查询redis并想检查是否有键不存在,但我对为什么我的代码不起作用感到困惑:localbulk=redis.call("HMGET",KEYS[1],"p1","p2")fori,vinipairs(bulk)doif(i==1)thenif(v==nil)thenreturnnil--Thisisneverenteredendendend但是下面的代码确实有效:localbulk=redis.call("HMGET",KEYS[1],"p1","p2")fori,vinipairs(bulk)doif(i==1)thenv=vor0if(v==0)thenreturn

lua - Redis Lua eval 和 pubsub - 在消息上发送命令?

是否可以使用lua评估来挂出和收听pubsubchannel,在特定消息上用命令回复?编辑:似乎已经实现了pubsub。我不太清楚如何处理这个问题(luagreen)。https://github.com/nrk/redis-lua/issues/7 最佳答案 不,subscribe不允许在脚本中使用。脚本与Redis中的其他所有内容在相同的事件循环中执行,这意味着,当您的脚本正在执行时,不会执行其他命令。此外,您链接到的库是一个lua客户端库。Here是redis中lua脚本的相关文档。

lua - Redis Lua eval 和 pubsub - 在消息上发送命令?

是否可以使用lua评估来挂出和收听pubsubchannel,在特定消息上用命令回复?编辑:似乎已经实现了pubsub。我不太清楚如何处理这个问题(luagreen)。https://github.com/nrk/redis-lua/issues/7 最佳答案 不,subscribe不允许在脚本中使用。脚本与Redis中的其他所有内容在相同的事件循环中执行,这意味着,当您的脚本正在执行时,不会执行其他命令。此外,您链接到的库是一个lua客户端库。Here是redis中lua脚本的相关文档。

lua - 当成员数量在运行时未知时,如何使用 Lua 向 Redis 集提供多个成员?

例如,可以使用sadd命令将多个成员添加到Redis中的某个set:saddmyset384842921在Lua中,我发现我可以执行如下相同的操作:redis.call("SADD","myset","38","484","2","92","1")但是,如果调用者不知道要向sadd提供多少参数,会发生什么情况?在JavaScript中,有一个Function.apply(...)函数可以按数组的顺序提供参数://Sourcefunctionwouldlooklikethis:functionX(a,b,c){...}X.apply(this,[38,484,2]);如何在Lua和Red

lua - 当成员数量在运行时未知时,如何使用 Lua 向 Redis 集提供多个成员?

例如,可以使用sadd命令将多个成员添加到Redis中的某个set:saddmyset384842921在Lua中,我发现我可以执行如下相同的操作:redis.call("SADD","myset","38","484","2","92","1")但是,如果调用者不知道要向sadd提供多少参数,会发生什么情况?在JavaScript中,有一个Function.apply(...)函数可以按数组的顺序提供参数://Sourcefunctionwouldlooklikethis:functionX(a,b,c){...}X.apply(this,[38,484,2]);如何在Lua和Red