Pipelining
Pipeline & Transaction
Pipeline
Pipelining commands allows you to send a single http request with multiple commands. Keep in mind, that the execution of pipelines is not atomic and the execution of other commands can interleave.
import { Redis } from "@upstash/redis";
const redis = new Redis({
/* auth */
});
const p = redis.pipeline();
// Now you can chain multiple commands to create your pipeline:
p.set("key", 2);
p.incr("key");
// or inline:
p.hset("key2", "field", { hello: "world" }).hvals("key2");
// Execute the pipeline once you are done building it:
// `exec` returns an array where each element represents the response of a command in the pipeline.
// You can optionally provide a type like this to get a typed response.
const res = await p.exec<[Type1, Type2, Type3]>();
For more information about pipelines using REST see here.
If you wish to benefit from pipeline automatically, you can simply enable auto-pipelining to make your redis client handle the commands in batches in the background. See the Auto-pipelining page.
Transaction
Remember that the pipeline is able to send multiple commands at once but can’t execute them atomically. With transactions, you can make the commands execute atomically.
import { Redis } from "@upstash/redis";
const redis = new Redis({
/* auth */
});
const p = redis.multi();
p.set("key", 2);
p.incr("key");
// or inline:
p.hset("key2", "field", { hello: "world" }).hvals("key2");
// execute the transaction
const res = await p.exec<[Type1, Type2, Type3]>();
Was this page helpful?