How auto-pipelining works?
Description
how can I check if something is being executed as a pipeline? I know that docs says this code is automatically handled as a pipeline because they are in the same "tick":
await Promise.all([
client.set(...),
client.set(...),
client.set(...),
])
but
const promises: Promise<unknown>[] = [];
for (const [key, value] of data) {
promises.push(client.hSet(key, value));
promises.push(client.expire(key, ...));
}
await Promise.all(promises);
is this being executed as a pipeline?
Yes, both of them are pipelined as both of them are running all the commands on the same "event loop tick"
edit: you can also use
const multi = client.mulit();
for (let i = 0; i < 10; i++) {
multi.get(i.toString());
}
const results = await multi.execAsPipeline();
In case you are executing the commands once - an array of promises + Promies.all (or similar) is the most performant way as you don't create unnecessary objects/memory. If you are executing the same commands multiple times multi would perform better as the commands will be encoded once and reused for every executing.
Thanks a lot.