如何使用Node.js中的Lua脚本将多个记录插入Redis Hash

时间:2015-12-03 17:56:16

标签: javascript node.js lua redis

如何使用Node.js中的Lua脚本将多个记录插入Redis Hash

我有下面的代码,使用multi,exec插入。如何使用lua脚本更改它

        return new Promise(function (resolve, reject) 
        {
            // results variable contains data fetched from MySQL db
            results.forEach(function (item) 
            {
                redisClient.hmset('sections:' + item.section_id, item);
            });

            redisClient.exec(function (err, replies) 
            {
                if (err) 
                {
                    console.log(err);
                }
                else 
                {
                    if (results.length == replies.length)
                        console.log("Sections Inserted");
                }

                resolve();
            });

        });

1 个答案:

答案 0 :(得分:1)

OP说

  

是的我得到了它,但这是前一个例子的合适方法。   我只想知道性能

由于原始海报告诉我,问题的目标是知道示例应用程序层JavaScript代码是否会更好地在Lua中实现以在Redis中执行它,我对整个问题有一个答案:

Redis是一个内存存储(它也可以存储在磁盘中,但实时数据访问是针对内存而不是磁盘完成的),而Redis在处理请求方面也不是多线程的,看起来原始海报的情景可能会更好,因为它在问题中呈现:使用应用程序层代码。

如果您使用Lua发出1k读取或写入操作,您将阻止整个Redis服务器,直到它完成Lua脚本执行,而如果您从应用程序层发出这些操作,它们将以1k请求结束对Redis来说,但它们还小到足以让来自其他客户的其他操作得到处理。

由于访问内存非常快,因此您应该更喜欢从应用程序层执行命令,并在您希望实现涉及两个或更多Redis命令的非常小的操作时使用Lua脚本。例如,以下序列可以在Lua中实现:

MULTI
hset users 1 "matias"
sadd users 1
EXEC

并使用EVALSHA调用它。