Skip to main content
Home

Built and signed on GitHub Actions

Fast, lightweight Redis client built upon the Web Streams API.

This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with Browsers
JSR Score
100%
Published
a month ago (1.1.1)
class RedisClient

A Redis client for interacting with a Redis server.

Examples

Send RESPv2 commands

import { RedisClient } from "@iuioiua/redis";
import { assertEquals } from "@std/assert/equals";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

const reply1 = await redisClient.sendCommand(["SET", "hello", "world"]);
assertEquals(reply1, "OK");

const reply2 = await redisClient.sendCommand(["GET", "hello"]);
assertEquals(reply2, "world");

Send RESP3 commands

Switch to RESP3 by sending a HELLO command with the version number 3.

import { RedisClient } from "@iuioiua/redis";
import { assertEquals } from "@std/assert/equals";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

// Switch to RESP3
await redisClient.sendCommand(["HELLO", 3]);

const reply1 = await redisClient.sendCommand(["HSET", "myhash", "foo", 1, "bar", 2]);
assertEquals(reply1, 2);

const reply2 = await redisClient.sendCommand(["HGETALL", "myhash"]);
assertEquals(reply2, { foo: "1", bar: "2" });

Receive raw data

Receive raw data by setting the raw parameter to true for your given method. This functionality is exclusive to bulk string replies.

import { RedisClient } from "@iuioiua/redis";
import { assertEquals } from "@std/assert/equals";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

const data = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

const reply1 = await redisClient.sendCommand(["SET", "data", data]);
assertEquals(reply1, "OK");

const reply2 = await redisClient.sendCommand(["GET", "data"], true);
assertEquals(reply2, data);

Execute operations with timeouts

See the Deno Standard Library's deadline() for more information. This function can be applied to any asynchronous operation.

import { RedisClient } from "@iuioiua/redis";
import { deadline } from "jsr:@std/async/deadline";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

// Rejects with a timeout error if the command takes longer than 100 milliseconds.
await deadline(redisClient.sendCommand(["GET", "foo"]), 100);

Retry operations

See the Deno Standard Library's retry() for more information. This function can be applied to any asynchronous operation.

import { RedisClient } from "@iuioiua/redis";
import { retry } from "jsr:@std/async/retry";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

// Retries to connect until successful const the exponential backoff algorithm.
await retry(() => redisClient.sendCommand(["GET", "foo"]));

Pipeline commands

See Redis pipelining for more information.

import { RedisClient } from "@iuioiua/redis";
import { assertEquals } from "@std/assert/equals";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

const replies = await redisClient.pipelineCommands([
  ["INCR", "Y"],
  ["INCR", "Y"],
  ["INCR", "Y"],
  ["INCR", "Y"],
]);
assertEquals(replies, [1, 2, 3, 4]);

Use pub/sub channels

See Redis Pub/Sub for more information.

import { RedisClient } from "@iuioiua/redis";
import { assertEquals } from "@std/assert/equals";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

await redisClient.writeCommand(["SUBSCRIBE", "mychannel"]);
for await (const reply of redisClient.readReplies()) {
  assertEquals(reply, ["subscribe", "mychannel", 1]);
  break;
}
await redisClient.writeCommand(["UNSUBSCRIBE", "mychannel"]);

Perform transaction

See Transactions for more information.

import { RedisClient } from "@iuioiua/redis";
import { assertEquals } from "@std/assert/equals";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

assertEquals(await redisClient.sendCommand(["MULTI"]), "OK");
assertEquals(await redisClient.sendCommand(["INCR", "QUX"]), "QUEUED");
assertEquals(await redisClient.sendCommand(["INCR", "QUX"]), "QUEUED");
assertEquals(await redisClient.sendCommand(["EXEC"]), [1, 2]);

Execute Lua scripts

See Scripting with Lua for more information.

import { RedisClient } from "@iuioiua/redis";
import { assertEquals } from "@std/assert/equals";

const redisConn = await Deno.connect({ port: 6379 });
const redisClient = new RedisClient(redisConn);

const reply1 = await redisClient.sendCommand(["EVAL", "return ARGV[1]", 0, "hello"]);
assertEquals(reply1, "hello");

const reply2 = await redisClient.sendCommand([
  "FUNCTION",
  "LOAD",
  "#!lua name=mylib\nredis.register_function('knockknock', function() return 'Who\\'s there?' end)",
]);
assertEquals(reply2, "mylib");

const reply3 = await redisClient.sendCommand(["FCALL", "knockknock", 0]);
assertEquals(reply3, "Who's there?");

Constructors

new
RedisClient(conn: { readable: ReadableStream<Uint8Array>; writable: WritableStream<Uint8Array>; })

Methods

Pipelines commands to the Redis server and returns the replies.

See Redis pipelining for more information.

readReplies(raw?: boolean): AsyncIterableIterator<Reply>

Used for pub/sub. Listens for replies from the Redis server.

See Redis Pub/Sub for more information.

Sends a command to the Redis server and returns the reply.

writeCommand(command: Command): Promise<void>

Writes a command to the Redis server without listening for a reply.

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@iuioiua/redis

Import symbol

import { RedisClient } from "@iuioiua/redis";
or

Import directly with a jsr specifier

import { RedisClient } from "jsr:@iuioiua/redis";

Add Package

pnpm i jsr:@iuioiua/redis
or (using pnpm 10.8 or older)
pnpm dlx jsr add @iuioiua/redis

Import symbol

import { RedisClient } from "@iuioiua/redis";

Add Package

yarn add jsr:@iuioiua/redis
or (using Yarn 4.8 or older)
yarn dlx jsr add @iuioiua/redis

Import symbol

import { RedisClient } from "@iuioiua/redis";

Add Package

npx jsr add @iuioiua/redis

Import symbol

import { RedisClient } from "@iuioiua/redis";

Add Package

bunx jsr add @iuioiua/redis

Import symbol

import { RedisClient } from "@iuioiua/redis";