如何在Node.js中使用Lua脚本向Redis Hash插入多条记录

如何使用Lua脚本在Node.js中将多条记录插入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();
            });

        });
点赞
用户411632
用户411632

OP 说

是的,我知道了,但对于上面的示例来说,哪种方法更合适呢? 我只想了解性能方面的问题

既然原始帖子的目的是了解样本应用程序层 JavaScript 代码是否最好在 Redis 中使用 Lua 实现来执行,那么我对整个问题有一个答案:不是

Redis 是一个内存存储器(它也可以存储在磁盘上,但是实时数据访问是针对内存而不是磁盘进行的),而且 Redis 在处理请求方面不是多线程的,所以原始帖子的情况似乎最好按照问题所述:使用应用程序层代码。

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

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

MULTI
hset users 1 "matias"
sadd users 1
EXEC

并使用 EVALSHA 调用它。

2015-12-04 12:28:08