草庐IT

lua-cjson

全部标签

javascript - 如何在 Node.js 中使用 Lua 脚本将多条记录插入 Redis 哈希

如何在Node.js中使用Lua脚本向RedisHash中插入多条记录我有以下使用multi,exec插入的代码。如何使用lua脚本更改它returnnewPromise(function(resolve,reject){//resultsvariablecontainsdatafetchedfromMySQLdbresults.forEach(function(item){redisClient.hmset('sections:'+item.section_id,item);});redisClient.exec(function(err,replies){if(err){conso

lua - 在 EVALSHA 中生成新 key

Documentation声明key必须显式传递,因此如果使用Redis集群,命令可以转发到适当的节点。但是,这是否也适用于新key?例如,如果我有一个脚本来注册一个新实体,并且这样的脚本正在动态创建一个由INCR的结果和文字组成的全新key,这对Redis集群来说会是一个问题吗?另一种方法是在单独的操作中调用INCR,并将key作为KEY[1]传递给脚本。 最佳答案 如果您仔细确保您的新key与其他key散列到同一台服务器,我认为您会没事的。也就是说,Cluster的重要之处不仅仅是预先声明您的key,而是要确保您的脚本操作的所有

lua - 如何在脚本加载到 redis 实例后读回脚本?

假设我已经将脚本加载到redis中,我可以稍后再次读取脚本来排除故障吗?例如,我可以读回“return100”吗scriptload"return100"evalsha22cd37f569ce84333afb93ba232d04d5aa6bb87a1keyval 最佳答案 你不能不读一遍剧本。它必须由您的应用程序创建和存储。Redis只是把它放在缓存中。如果你想调试你的脚本,你可以使用scriptdebugcommand. 关于lua-如何在脚本加载到redis实例后读回脚本?,我们在S

lua - Redis 链式命令

我想知道将一系列命令链接在一起以便它们在返回最终结果之前都在Redis上执行的最佳方法是什么?我所有的数据都存储在集合中。data1=[a,b,c,d,e]data2=[b,c]我将如何获取data1和data2的交集(result=b,c),然后对结果调用SRANDMEMBER?在一个系列中它看起来像:redis>SINTERdata1data2redis>SRANDMEMBER当然可以将其他操作链接在一起,例如SDIFF和SADD,但从交叉点中选择随机项目似乎是最简单的示例。我尝试创建一个lua脚本,但当我尝试执行以下代码时收到消息“Luaredis()命令参数必须是字符串或整数”

lua - 使用 redis.call ("sinter", ...) 命令将多个集与 lua 脚本相交

我想交叉多个集合(2个或更多)。要相交的集合数作为ARGV从命令行传递。随着从命令行传递的集合数量。所以redis.call()函数的参数个数是不确定的。如何在Lua脚本中使用redis.call()函数。但是,我写了一个脚本,它的算法如下:接受KEYS[1]中要相交的集合的数量。使用setIntersected=redis.call(ARGV[1],ARGV[2])将前两组相交。运行循环并使用setIntersected=redis.call("sinter",tostring(setIntersected),set[i])最后我应该得到相交集。上述算法的代码是:localnoOfA

node.js - 执行 redis eval 命令以在 nodeJS 中运行 Lua 脚本

在Redis中,我通过CLI运行Lua脚本,如下所示:-$redis-cli--evaldebug_script.luakey1key2key3key4,arg1arg2因此,我的Lua脚本接受4个键和2个参数。现在我想在Node.js中运行相同的脚本。我正在使用this用于在我的应用中导入Redis的库。我没有找到任何示例来说明用于执行Lua脚本的redisClient.eval(...)函数的参数。因此,我只是随便打一些可能有用的东西。但似乎没有任何效果。我的app.js是这样的:varredis=require("redis")varclient=redis.createClie

lua - 获取错误 : Wrong number of args calling Redis command From Lua script

我想用Redis测试Lua脚本,但我不断收到最简单命令的错误消息。截图如下:为什么这个简单的命令说我没有提供足够的参数? 最佳答案 我没有看到在v3.2的预发布版上运行此代码有任何错误:redis.call("ZADD","user",1,"one")returnredis.call("ZRANGE","user",0,-1)我将one打印到输出窗口。如果我跳过ZADD或ZRANGE调用中的一个参数,我确实会遇到同样的错误,例如在尝试运行redis.call("ZADD","user",1)时。

lua - 如何针对多个 Redis 值并行运行单个 Lua 脚本?

在Redis中,我们有表示输入值的字符串。我们(想要)有一个动态生成的Lua脚本(在用户使用GUI定义之后),它根据输入字符串计算结果字符串。每组输入值相互独立。所以这应该是微不足道的并行化,但是,EVAL似乎会阻塞直到完成。在Redis中有没有一种方法可以跨一堆值运行单个Lua脚本,而无需重写脚本本身来做到这一点? 最佳答案 由于Redis是作为单线程服务器实现的,因此不可能从同一个客户端并行运行多个命令。但是,您应该能够在多个客户端上运行多个命令(包括script命令),Redis会将它们交织在其IO循环中。话虽如此,Redis

redis - Geo.Lua函数GEOMETRYFILTER和Redis

我想弄清楚如何在geo.lua中实际调用GEOMETRYFILTER函数,因为文档对我来说不是很清楚:https://github.com/RedisLabs/geo.lua#GEOMETRYFILTER这些参数到底是什么意思,我如何从Redis-cli调用这个函数?我无法在谷歌上找到任何示例。 最佳答案 geo.lua的作者在这里-IIRC它涉及首先创建一个polyhash来描述过滤器,然后将它与geoset一起提供给库。性能非常糟糕,因为一切都在Lua中完成。仅供引用-该库不再维护。

redis - 使用关联数组总值计数 Lua

我想统计每个rediskey的数据类型,我写了下面的代码,但是运行报错,如何解决?localdetail={}detail.hash=0detail.set=0detail.string=0localmatch=redis.call('KEYS','*')fori,vinipairs(match)dolocalval=redis.call('TYPE',v)detail.val=detail.val+1endreturndetail(错误)ERR运行脚本时出错(调用f_29ae9e57b4b82e2ae1d5020e418f04fcc98ebef4):@user_script:10:u