如何在Node.js中使用Lua Script将多条记录插入Redis Hash



如何在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();
            });
        });

OP表示

是的,我明白了,但对于前面的例子来说,这是一个合适的方法。我只想知道的性能

由于最初的发帖者告诉我,这个问题的目标是知道是否可以在Lua中更好地实现示例应用层JavaScript代码,以便在Redis中执行它,所以我对整个问题有一个答案:no

Redis是一个内存存储(它也可以存储在磁盘中,但实时数据访问是在内存而不是磁盘上进行的),而且Redis在处理请求方面不是多线程的,看起来原始海报的场景可能会更好地工作,因为它在问题中提出了:使用应用层代码。

如果你使用Lua发出1k的读或写操作,你将阻塞整个Redis服务器,直到它完成Lua脚本执行,而如果你从应用层发出这些操作,它们最终会以1k的请求发送给Redis,但它们还足够小,可以处理来自其他客户端的其他操作。

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

MULTI
hset users 1 "matias"
sadd users 1
EXEC

并使用EVALSHA调用它。

最新更新