我创建了一个redislua脚本来执行基于关键数据类型的命令:-localkeyType=redis.call("TYPE",KEYS[1])if(keyType=="string")thenreturnredis.call("GET",KEYS[1])elsereturnnilend每次我执行它时它都返回null。任何人都可以帮助更正脚本。 最佳答案 对redis.call的响应返回一个如下所示的表格:{"ok":"string"}(如果类型当然是字符串)因此,为了正确检查,您应该将代码更改为:localkeyType=redis
我创建了一个redislua脚本来执行基于关键数据类型的命令:-localkeyType=redis.call("TYPE",KEYS[1])if(keyType=="string")thenreturnredis.call("GET",KEYS[1])elsereturnnilend每次我执行它时它都返回null。任何人都可以帮助更正脚本。 最佳答案 对redis.call的响应返回一个如下所示的表格:{"ok":"string"}(如果类型当然是字符串)因此,为了正确检查,您应该将代码更改为:localkeyType=redis
SPOP不允许在lua中执行。如果你先做一些非确定性的命令,那么你就不允许执行写命令。这让我感到困惑。那么为什么redis会有这样的限制呢? 最佳答案 它在Redis文档中有很好的解释here.脚本通过发送脚本并在从属服务器上运行来复制到从属服务器,因此脚本每次运行时都需要始终产生相同的结果,否则从属服务器上的数据将与主服务器上的数据不同。如果您需要在脚本中执行非确定性操作,您可以在同一链接中尝试新的“脚本效果复制”。 关于lua-为什么redis不能在lua脚本中执行非确定性命令,我们
SPOP不允许在lua中执行。如果你先做一些非确定性的命令,那么你就不允许执行写命令。这让我感到困惑。那么为什么redis会有这样的限制呢? 最佳答案 它在Redis文档中有很好的解释here.脚本通过发送脚本并在从属服务器上运行来复制到从属服务器,因此脚本每次运行时都需要始终产生相同的结果,否则从属服务器上的数据将与主服务器上的数据不同。如果您需要在脚本中执行非确定性操作,您可以在同一链接中尝试新的“脚本效果复制”。 关于lua-为什么redis不能在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命令:red:msetnx(key1,val1,key2,val2,key3,val3,...)我想将它设置在一个函数后面,该函数接受一个键/值对表并通过red:msetnx()运行它——我如何将我的表重新格式化为交替键/value逗号分隔的参数列表并将其传递给函数? 最佳答案 创建一个按顺序排列键和值的表,并使用unpack传递它:args={'key1','val1','key2','val2','key3','val3'}red:msetnx(unpack(args))
我一直在使用redis来跟踪分布式系统中外部api的速率限制。我决定为存在限制的每条路线创建一个key。key的值是在限制重置之前我仍然可以发出多少请求。并且通过将key的TTL设置为限制重置的时间来进行重置。为此,我编写了以下lua脚本:ifredis.call("EXISTS",KEYS[1])==1thenlocalremaining=redis.call("DECR",KEYS[1])ifremaining0then--[[--Wewouldexceedthelimitifweweretodoacallnow,solet'ssendbackthatalimitexists(1)
我一直在使用redis来跟踪分布式系统中外部api的速率限制。我决定为存在限制的每条路线创建一个key。key的值是在限制重置之前我仍然可以发出多少请求。并且通过将key的TTL设置为限制重置的时间来进行重置。为此,我编写了以下lua脚本:ifredis.call("EXISTS",KEYS[1])==1thenlocalremaining=redis.call("DECR",KEYS[1])ifremaining0then--[[--Wewouldexceedthelimitifweweretodoacallnow,solet'ssendbackthatalimitexists(1)
是否可以使用lua评估来挂出和收听pubsubchannel,在特定消息上用命令回复?编辑:似乎已经实现了pubsub。我不太清楚如何处理这个问题(luagreen)。https://github.com/nrk/redis-lua/issues/7 最佳答案 不,subscribe不允许在脚本中使用。脚本与Redis中的其他所有内容在相同的事件循环中执行,这意味着,当您的脚本正在执行时,不会执行其他命令。此外,您链接到的库是一个lua客户端库。Here是redis中lua脚本的相关文档。
是否可以使用lua评估来挂出和收听pubsubchannel,在特定消息上用命令回复?编辑:似乎已经实现了pubsub。我不太清楚如何处理这个问题(luagreen)。https://github.com/nrk/redis-lua/issues/7 最佳答案 不,subscribe不允许在脚本中使用。脚本与Redis中的其他所有内容在相同的事件循环中执行,这意味着,当您的脚本正在执行时,不会执行其他命令。此外,您链接到的库是一个lua客户端库。Here是redis中lua脚本的相关文档。