是的,我必须同意这方面缺乏示例,但我设法创建了一个流,向其中发送了多个批量插入命令。
您应该安装Redis Stream模块:
npm install redis-stream
这是使用流的方法:
var redis = require('redis-stream'),
client = new redis(6379, '127.0.0.1');
// Open stream
var stream = client.stream();
// Example of setting 10000 records
for(var record = 0; record < 10000; record++) {
// Command is an array of arguments:
var command = ['set', 'key' + record, 'value'];
// Send command to stream, but parse it before
stream.redis.write( redis.parse(command) );
}
// Create event when stream is closed
stream.on('close', function () {
console.log('Completed!');
// Here you can create stream for reading results or similar
});
// Close the stream after batch insert
stream.end();
另外,您可以创建任意数量的流,并在任何时间打开/关闭它们。
在redis-stream node模块上有几个示例展示如何在node.js中使用redis流。
https://github.com/mranney/node_redis/issues/539#issuecomment-32203325
batch()
。使用multi()
会更慢的原因是它是事务性的。如果出现错误,将不会执行任何操作。也许这正是你想要的,但在速度方面你有选择余地。redis-cli
进行大规模插入时要慢。redis-cli
进程。var redisPipe = spawn('redis-cli', ['--pipe']);
spawn()
返回对子进程的引用,你可以使用stdin
进行管道操作。例如:redisPipe.stdin.write()
。node_redis
包好一些(它的文档中明确说明数据保存在内存中),尽管我没有深入研究过,所以我不知道内存占用的情况。它可能也是在做同样的事情。默认情况下,Node.js库node_redis会以管道方式发送命令,并自动选择每个管道中的命令数量[(https://github.com/NodeRedis/node-redis/issues/539#issuecomment-32203325)][1]。因此,您不需要担心这个问题。但是,其他Redis客户端可能不会默认使用管道;您需要查看客户端文档以了解如何利用管道。
eval
或evalsha
命令来运行它们。 - Tonistream.write( ... )
在新版本中是:stream.redis.write( ... )
- Toni