草庐IT

lua-cjson

全部标签

lua - JedisCluster 复制和 EVAL

我知道Jedis(和其他客户端库)可以选择合适的shard来执行Lua脚本。但是我找不到的是之后如何使用主从节点。假设我有多个Lua脚本,其中一部分用于写入,另一部分用于读取。考虑到从属设备是只读的,Jedis如何知道应该在主设备还是从属设备上执行?它是否总是向master发送EVAL命令,即使对于只读脚本也是如此? 最佳答案 Jedis以集群模式将所有命令发送到master节点。总之,我指的是各种Redis命令,而不仅仅是EVAL命令。Jedis可能使用从节点,但仅在内部集群配置期间使用。

lua - redis.call/lua 参数的动态个数

我想从lua脚本中通过多个MATCH进行搜索,但是“MATCH”的数量取决于脚本的需要——我需要搜索匹配所有单词的键(在本例中为“aa”、“bb”)任何顺序和字数可能更多(或更少)如果它修复了它的工作方式:localresult=redis.call("SCAN",0,"MATCH","*aa*","MATCH","*bb*")我如何让它变得动态,我可以根据需要添加尽可能多的MATCH?像这样的东西:localmatch={}fori=1,#ARGVdotable.insert(match,"MATCH")table.insert(match,"*"..ARGV[i].."*")end

lua - redis.call/lua 参数的动态个数

我想从lua脚本中通过多个MATCH进行搜索,但是“MATCH”的数量取决于脚本的需要——我需要搜索匹配所有单词的键(在本例中为“aa”、“bb”)任何顺序和字数可能更多(或更少)如果它修复了它的工作方式:localresult=redis.call("SCAN",0,"MATCH","*aa*","MATCH","*bb*")我如何让它变得动态,我可以根据需要添加尽可能多的MATCH?像这样的东西:localmatch={}fori=1,#ARGVdotable.insert(match,"MATCH")table.insert(match,"*"..ARGV[i].."*")end

lua - Redis LUA脚本条件取错返回语句

我有以下RedisLUA脚本:eval"ifredis.call('ZSCORE',KEYS[1],ARGV[1])==nilthenreturn'true'elsereturn'false'end"1statstest作为返回,我总是得到“false”,尽管下面的命令返回nil:zscorestatstest结果:(nil)第一个命令的预期结果为“真”。我已将第一个命令的键和参数更改为随机值,但我总是得到“假”。任何人都可以帮我吗?我正在使用Redis2.8.17。 最佳答案 请引用documentationregardingty

lua - Redis LUA脚本条件取错返回语句

我有以下RedisLUA脚本:eval"ifredis.call('ZSCORE',KEYS[1],ARGV[1])==nilthenreturn'true'elsereturn'false'end"1statstest作为返回,我总是得到“false”,尽管下面的命令返回nil:zscorestatstest结果:(nil)第一个命令的预期结果为“真”。我已将第一个命令的键和参数更改为随机值,但我总是得到“假”。任何人都可以帮我吗?我正在使用Redis2.8.17。 最佳答案 请引用documentationregardingty

lua - 如何减少与 Redis 客户端的握手次数?

我正在编写一个需要非常快的响应时间的应用程序,我对redis有一些查询,这需要多个集合的交集和并集。一个例子是((A联合B)交集C)但是,当我使用Java客户端执行此操作时,每个查询都需要1次以上的握手,从而增加了我的响应时间。我想知道是否有一种方法可以在一次握手中完成,Lua脚本看起来是个不错的选择,但我不确定它在内部如何工作 最佳答案 您还可以使用pipeline以减少RTT。使用pipeline,您可以一次向Redis发送多个命令,然后读取所有回复。 关于lua-如何减少与Redi

lua - 如何减少与 Redis 客户端的握手次数?

我正在编写一个需要非常快的响应时间的应用程序,我对redis有一些查询,这需要多个集合的交集和并集。一个例子是((A联合B)交集C)但是,当我使用Java客户端执行此操作时,每个查询都需要1次以上的握手,从而增加了我的响应时间。我想知道是否有一种方法可以在一次握手中完成,Lua脚本看起来是个不错的选择,但我不确定它在内部如何工作 最佳答案 您还可以使用pipeline以减少RTT。使用pipeline,您可以一次向Redis发送多个命令,然后读取所有回复。 关于lua-如何减少与Redi

Redis 上的 Lua 错误 : Script attempted to access unexisting global variable 'require'

这是我要执行的测试脚本:localcjson=require"cjson"localjson_text='[true,{"foo":"bar"}]'localvalue=cjson.decode(json_text)return'Decoded:'..value它给出了一个奇怪的响应:evalsha76b573109be38414056b58c749016a56052063bd0(error)ERRErrorrunningscript(calltof_76b573109be38414056b58c749016a56052063bd):@enable_strict_lua:15:user

Redis 上的 Lua 错误 : Script attempted to access unexisting global variable 'require'

这是我要执行的测试脚本:localcjson=require"cjson"localjson_text='[true,{"foo":"bar"}]'localvalue=cjson.decode(json_text)return'Decoded:'..value它给出了一个奇怪的响应:evalsha76b573109be38414056b58c749016a56052063bd0(error)ERRErrorrunningscript(calltof_76b573109be38414056b58c749016a56052063bd):@enable_strict_lua:15:user

lua - 我们可以在redis的lua脚本中做管道吗

例如我有几个set命令,我不关心它们的返回值,在我的lua脚本中,我必须写几个redis.call('set',key,值)。有没有类似管道的方法,所以我可以一起做。可能效率更高? 最佳答案 否-无法通过Lua脚本对Redis调用进行流水线处理或对其进行批处理。请注意,调用redis.call非常有效,因此无论如何您都不应该太担心。正如@deltheil所指出的,如果您使用其可变参数形式,您可以将对同一命令的多次调用“分组”。虽然这对Lua脚本不太重要,但这绝对是推荐的做法。 关于lua