A Redis client for interacting with a Redis server.
Send RESPv2 commands
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
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
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
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
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
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
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
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
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?");
RedisClient(conn: { readable: ReadableStream<Uint8Array>; writable: WritableStream<Uint8Array>; })
pipelineCommands(): Promise<Reply[]>
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.
sendCommand(): Promise<Reply>
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.