How auto-pipelining works?
Closed this issue · 2 comments
MARCROCK22 commented
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?
leibale commented
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.
MARCROCK22 commented
Thanks a lot.