⚠️ Internal: This API is not publically exported by the package.

Class Pipeline<TCommands>

Upstash REST API supports command pipelining to send multiple commands in batch, instead of sending each command one by one and waiting for a response. When using pipelines, several commands are sent using a single HTTP request, and a single JSON array response is returned. Each item in the response array corresponds to the command in the same order within the pipeline.

NOTE:

Execution of the pipeline is not atomic. Even though each command in the pipeline will be executed in order, commands sent by other clients can interleave with the pipeline.

Examples:

 const p = redis.pipeline() // or redis.multi()
p.set("key","value")
p.get("key")
const res = await p.exec()

You can also chain commands together

const p = redis.pipeline()
const res = await p.set("key","value").get("key").exec()

Return types are inferred if all commands are chained, but you can still override the response type manually:

 redis.pipeline()
.set("key", { greeting: "hello"})
.get("key")
.exec<["OK", { greeting: string } ]>()

Type Parameters

  • TCommands extends Command<any, any>[] = []

Accessors

  • get json(): {
        arrappend: ((key, path, ...values) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        arrindex: ((key, path, value, start?, stop?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        arrinsert: ((key, path, index, ...values) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        arrlen: ((key, path?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        arrpop: ((key, path?, index?) => Pipeline<[...TCommands[], Command<any, unknown[]>]>);
        arrtrim: ((key, path?, start?, stop?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        clear: ((key, path?) => Pipeline<[...TCommands[], Command<any, number>]>);
        del: ((key, path?) => Pipeline<[...TCommands[], Command<any, number>]>);
        forget: ((key, path?) => Pipeline<[...TCommands[], Command<any, number>]>);
        geoadd: ((args_0, args_1, ...args_2) => Pipeline<[...TCommands[], Command<any, number>]>);
        geodist: ((key, member1, member2, unit?) => Pipeline<[...TCommands[], Command<any, number>]>);
        geohash: ((args_0, ...args_1) => Pipeline<[...TCommands[], Command<any, string[]>]>);
        geopos: ((args_0, ...args_1) => Pipeline<[...TCommands[], Command<any, {
            lat: number;
            lng: number;
        }[]>]>);
        geosearch: ((key, centerPoint, shape, order, opts?) => Pipeline<[...TCommands[], Command<any, ({
            member: unknown;
        } & {
            coord?: {
                lat: number;
                long: number;
            };
            dist?: number;
            hash?: string;
        })[]>]>);
        geosearchstore: ((destination, key, centerPoint, shape, order, opts?) => Pipeline<[...TCommands[], Command<any, number>]>);
        get: ((...args) => Pipeline<[...TCommands[], Command<any, any>]>);
        mget: ((keys, path) => Pipeline<[...TCommands[], Command<any, any>]>);
        numincrby: ((key, path, value) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        nummultby: ((key, path, value) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        objkeys: ((key, path?) => Pipeline<[...TCommands[], Command<any, string[][]>]>);
        objlen: ((key, path?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        resp: ((key, path?) => Pipeline<[...TCommands[], Command<any, any>]>);
        set: ((key, path, value, opts?) => Pipeline<[...TCommands[], Command<any, "OK">]>);
        strappend: ((key, path, value) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        strlen: ((key, path?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        toggle: ((key, path) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        type: ((key, path?) => Pipeline<[...TCommands[], Command<any, string[]>]>);
    }
  • Returns {
        arrappend: ((key, path, ...values) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        arrindex: ((key, path, value, start?, stop?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        arrinsert: ((key, path, index, ...values) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        arrlen: ((key, path?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        arrpop: ((key, path?, index?) => Pipeline<[...TCommands[], Command<any, unknown[]>]>);
        arrtrim: ((key, path?, start?, stop?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        clear: ((key, path?) => Pipeline<[...TCommands[], Command<any, number>]>);
        del: ((key, path?) => Pipeline<[...TCommands[], Command<any, number>]>);
        forget: ((key, path?) => Pipeline<[...TCommands[], Command<any, number>]>);
        geoadd: ((args_0, args_1, ...args_2) => Pipeline<[...TCommands[], Command<any, number>]>);
        geodist: ((key, member1, member2, unit?) => Pipeline<[...TCommands[], Command<any, number>]>);
        geohash: ((args_0, ...args_1) => Pipeline<[...TCommands[], Command<any, string[]>]>);
        geopos: ((args_0, ...args_1) => Pipeline<[...TCommands[], Command<any, {
            lat: number;
            lng: number;
        }[]>]>);
        geosearch: ((key, centerPoint, shape, order, opts?) => Pipeline<[...TCommands[], Command<any, ({
            member: unknown;
        } & {
            coord?: {
                lat: number;
                long: number;
            };
            dist?: number;
            hash?: string;
        })[]>]>);
        geosearchstore: ((destination, key, centerPoint, shape, order, opts?) => Pipeline<[...TCommands[], Command<any, number>]>);
        get: ((...args) => Pipeline<[...TCommands[], Command<any, any>]>);
        mget: ((keys, path) => Pipeline<[...TCommands[], Command<any, any>]>);
        numincrby: ((key, path, value) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        nummultby: ((key, path, value) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        objkeys: ((key, path?) => Pipeline<[...TCommands[], Command<any, string[][]>]>);
        objlen: ((key, path?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        resp: ((key, path?) => Pipeline<[...TCommands[], Command<any, any>]>);
        set: ((key, path, value, opts?) => Pipeline<[...TCommands[], Command<any, "OK">]>);
        strappend: ((key, path, value) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        strlen: ((key, path?) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        toggle: ((key, path) => Pipeline<[...TCommands[], Command<any, number[]>]>);
        type: ((key, path?) => Pipeline<[...TCommands[], Command<any, string[]>]>);
    }

Constructors

  • Type Parameters

    • TCommands extends Command<any, any>[] = []

    Parameters

    Returns Pipeline<TCommands>

Methods

  • Returns the length of pipeline before the execution

    Returns number

Properties

append: ((key, value) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

bitcount: ((key, start, end) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

bitop: {
    (op, destinationKey, sourceKey, ...sourceKeys): Pipeline<[...TCommands[], BitOpCommand]>;
    (op, destinationKey, sourceKey): Pipeline<[...TCommands[], BitOpCommand]>;
}

Type declaration

bitpos: ((key, bit, start?, end?) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

chain: any

Pushes a command into the pipeline and returns a chainable instance of the pipeline

client: any
commandOptions?: any
commands: any
copy: ((key, destinationKey, opts?) => Pipeline<[...TCommands[], Command<any, "COPIED" | "NOT_COPIED">]>)

Type declaration

    • (key, destinationKey, opts?): Pipeline<[...TCommands[], Command<any, "COPIED" | "NOT_COPIED">]>
    • Parameters

      • key: string
      • destinationKey: string
      • Optional opts: {
            replace: boolean;
        }
        • replace: boolean

      Returns Pipeline<[...TCommands[], Command<any, "COPIED" | "NOT_COPIED">]>

dbsize: (() => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

decr: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

decrby: ((key, decrement) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

del: ((...args) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

echo: ((message) => Pipeline<[...TCommands[], Command<any, string>]>)

Type declaration

eval: (<TArgs, TData>(script, keys, args) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

evalsha: (<TArgs, TData>(sha1, keys, args) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

exec: (<TCommandResults>() => Promise<TCommandResults>)

Type declaration

    • <TCommandResults>(): Promise<TCommandResults>
    • Send the pipeline request to upstash.

      Returns an array with the results of all pipelined commands.

      If all commands are statically chained from start to finish, types are inferred. You can still define a return type manually if necessary though:

      const p = redis.pipeline()
      p.get("key")
      const result = p.exec<[{ greeting: string }]>()

      Type Parameters

      • TCommandResults extends unknown[] = [] extends TCommands
            ? unknown[]
            : InferResponseData<TCommands>

      Returns Promise<TCommandResults>

exists: ((...args) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

expire: ((key, seconds) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

expireat: ((key, unix) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

flushall: ((args?) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

flushdb: ((opts?) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

get: (<TData>(key) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

getbit: ((key, offset) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

getdel: (<TData>(key) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

getrange: ((key, start, end) => Pipeline<[...TCommands[], Command<any, string>]>)

Type declaration

getset: (<TData>(key, value) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

hdel: ((key, ...fields) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

hexists: ((key, field) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

hget: (<TData>(key, field) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

hgetall: (<TData>(key) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

hincrby: ((key, field, increment) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

hincrbyfloat: ((key, field, increment) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

hkeys: ((key) => Pipeline<[...TCommands[], Command<any, string[]>]>)

Type declaration

hlen: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

hmget: (<TData>(key, ...fields) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

hmset: (<TData>(key, kv) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

hrandfield: (<TData>(key, count?, withValues?) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

hscan: ((key, cursor, cmdOpts?) => Pipeline<[...TCommands[], Command<any, [number, (string | number)[]]>]>)

Type declaration

hset: (<TData>(key, kv) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

hsetnx: (<TData>(key, field, value) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

hstrlen: ((key, field) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

hvals: ((key) => Pipeline<[...TCommands[], Command<any, any>]>)

Type declaration

incr: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

incrby: ((key, value) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

incrbyfloat: ((key, value) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

keys: ((pattern) => Pipeline<[...TCommands[], Command<any, string[]>]>)

Type declaration

lindex: ((key, index) => Pipeline<[...TCommands[], Command<any, any>]>)

Type declaration

linsert: (<TData>(key, direction, pivot, value) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

llen: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

lmove: (<TData>(source, destination, whereFrom, whereTo) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

    • <TData>(source, destination, whereFrom, whereTo): Pipeline<[...TCommands[], Command<any, TData>]>
    • Type Parameters

      • TData = string

      Parameters

      • source: string
      • destination: string
      • whereFrom: "left" | "right"
      • whereTo: "left" | "right"

      Returns Pipeline<[...TCommands[], Command<any, TData>]>

lpop: (<TData>(key, count?) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

lpos: (<TData>(key, element, opts?) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

    • <TData>(key, element, opts?): Pipeline<[...TCommands[], Command<any, TData>]>
    • Type Parameters

      • TData

      Parameters

      • key: string
      • element: unknown
      • Optional opts: {
            count?: number;
            maxLen?: number;
            rank?: number;
        }
        • Optional count?: number
        • Optional maxLen?: number
        • Optional rank?: number

      Returns Pipeline<[...TCommands[], Command<any, TData>]>

lpush: (<TData>(key, ...elements) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

lpushx: (<TData>(key, ...elements) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

lrange: (<TResult>(key, start, end) => Pipeline<[...TCommands[], Command<any, TResult[]>]>)

Type declaration

lrem: (<TData>(key, count, value) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

lset: (<TData>(key, index, value) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

ltrim: ((key, start, end) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

mget: (<TData>(...args) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

mset: (<TData>(kv) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

msetnx: (<TData>(kv) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

multiExec: any
persist: ((key) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

pexpire: ((key, milliseconds) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

pexpireat: ((key, unix) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

pfadd: ((args_0, ...args_1) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

pfcount: ((args_0, ...args_1) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

pfmerge: ((destination_key, ...args_1) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

ping: ((args?) => Pipeline<[...TCommands[], Command<any, string>]>)

Type declaration

psetex: (<TData>(key, ttl, value) => Pipeline<[...TCommands[], Command<any, string>]>)

Type declaration

pttl: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

publish: ((channel, message) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

randomkey: (() => Pipeline<[...TCommands[], Command<any, string>]>)

Type declaration

rename: ((source, destination) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

renamenx: ((source, destination) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

rpop: (<TData>(key, count?) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

rpush: (<TData>(key, ...elements) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

rpushx: (<TData>(key, ...elements) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

sadd: (<TData>(key, ...members) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

scan: ((cursor, opts?) => Pipeline<[...TCommands[], Command<any, [number, string[]]>]>)

Type declaration

scard: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

scriptExists: ((...args) => Pipeline<[...TCommands[], Command<any, number[]>]>)

Type declaration

scriptFlush: ((opts?) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

scriptLoad: ((script) => Pipeline<[...TCommands[], Command<any, string>]>)

Type declaration

sdiff: ((key, ...keys) => Pipeline<[...TCommands[], Command<any, unknown[]>]>)

Type declaration

    • (key, ...keys): Pipeline<[...TCommands[], Command<any, unknown[]>]>
    • Parameters

      • key: string
      • Rest ...keys: string[]

      Returns Pipeline<[...TCommands[], Command<any, unknown[]>]>

sdiffstore: ((destination, ...keys) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

set: (<TData>(key, value, opts?) => Pipeline<[...TCommands[], Command<any, "OK" | TData>]>)

Type declaration

setbit: ((key, offset, value) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

setex: (<TData>(key, ttl, value) => Pipeline<[...TCommands[], Command<any, "OK">]>)

Type declaration

setnx: (<TData>(key, value) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

setrange: ((key, offset, value) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

sinter: ((key, ...keys) => Pipeline<[...TCommands[], Command<any, string[]>]>)

Type declaration

sinterstore: ((destination, key, ...keys) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

sismember: (<TData>(key, member) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

smembers: (<TData>(key) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

smismember: (<TMembers>(key, members) => Pipeline<[...TCommands[], Command<any, (0 | 1)[]>]>)

Type declaration

smove: (<TData>(source, destination, member) => Pipeline<[...TCommands[], Command<any, 0 | 1>]>)

Type declaration

spop: (<TData>(key, count?) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

srandmember: (<TData>(key, count?) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

srem: (<TData>(key, ...members) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

sscan: ((key, cursor, opts?) => Pipeline<[...TCommands[], Command<any, [number, (string | number)[]]>]>)

Type declaration

strlen: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

sunion: ((key, ...keys) => Pipeline<[...TCommands[], Command<any, unknown[]>]>)

Type declaration

sunionstore: ((destination, key, ...keys) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

time: (() => Pipeline<[...TCommands[], Command<any, [number, number]>]>)

Type declaration

touch: ((...args) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

ttl: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

type: ((key) => Pipeline<[...TCommands[], Command<any, Type>]>)

Type declaration

unlink: ((...args) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zadd: (<TData>(...args) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zcard: ((key) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zcount: ((key, min, max) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zdiffstore: ((destination, numkeys, ...keys) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zincrby: (<TData>(key, increment, member) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zinterstore: ((destination, numKeys, keys, opts?) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zlexcount: ((key, min, max) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zmscore: ((key, members) => Pipeline<[...TCommands[], Command<any, number[]>]>)

Type declaration

zpopmax: (<TData>(key, count?) => Pipeline<[...TCommands[], Command<any, TData[]>]>)

Type declaration

zpopmin: (<TData>(key, count?) => Pipeline<[...TCommands[], Command<any, TData[]>]>)

Type declaration

zrange: (<TData>(...args) => Pipeline<[...TCommands[], Command<any, TData>]>)

Type declaration

    • <TData>(...args): Pipeline<[...TCommands[], Command<any, TData>]>
    • Type Parameters

      • TData extends unknown[]

      Parameters

      • Rest ...args: [key: string, min: number, max: number, opts?: ZRangeCommandOptions] | [key: string, min: `(${string}` | `[${string}` | "-" | "+", max: `(${string}` | `[${string}` | "-" | "+", opts: {
            byLex: true;
            byScore?: true;
            count?: number;
            offset?: number;
            rev?: boolean;
            withScores?: boolean;
        }] | [key: string, min: number | `(${number}` | "-inf" | "+inf", max: number | `(${number}` | "-inf" | "+inf", opts: {
            byLex?: true;
            byScore: true;
            count?: number;
            offset?: number;
            rev?: boolean;
            withScores?: boolean;
        }]

      Returns Pipeline<[...TCommands[], Command<any, TData>]>

zrank: (<TData>(key, member) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zrem: (<TData>(key, ...members) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zremrangebylex: ((key, min, max) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zremrangebyrank: ((key, start, stop) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zremrangebyscore: ((key, min, max) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zrevrank: (<TData>(key, member) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zscan: ((key, cursor, opts?) => Pipeline<[...TCommands[], Command<any, [number, (string | number)[]]>]>)

Type declaration

zscore: (<TData>(key, member) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration

zunion: ((numKeys, keys, opts?) => Pipeline<[...TCommands[], Command<any, any>]>)

Type declaration

zunionstore: ((destination, numKeys, keys, opts?) => Pipeline<[...TCommands[], Command<any, number>]>)

Type declaration