如何在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
调用它。