Skip to content
/ redis Public

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

License

Notifications You must be signed in to change notification settings

iuioiua/redis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@iuioiua/redis

JSR CI

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

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");

Features

  • Capable of handling 1000s of requests per second.
  • More than 12x smaller than the next major Redis client in Deno.
  • Supports RESPv2, RESP3, raw data, pipelining, pub/sub, transactions and Lua scripts.
  • Compatible with all major JavaScript runtimes including Bun, Cloudflare Workers, Deno, Node.js and the browser!
  • Cleanly written to be easily understood and debugged.
  • Compatible with timeouts and retries.
  • Encourages the use of actual Redis commands without intermediate abstractions, resulting in fewer moving parts.

Resources

Known issues

Replies containing CRLF

This package currently doesn't correctly read replies that contain CRLF (\r\n) within the message. For example, if a bulk string contains a CRLF, it'll only return the message, up to that CLRF. The simple workaround for this is to use LF (\n) for delimiting newlines, instead of CRLF.

If this issue affects you, please open a new issue. Otherwise, this issue is a "won't fix".

Design

Like Italian cooking, the design of this package is defined by what it doesn't do rather than what it does do, and relies upon high-quality building blocks. It doesn't extend the functionality of a TCP connection. It doesn't implement a method for each Redis command, of which there are hundreds. Instead, the Redis client consumes a TCP connection, lets the user write Redis commands, and returns the parsed result according to the RESP data type. The result is a design with fewer moving parts, fewer bugs, less maintenance, and a smaller footprint than other JavaScript implementations of Redis clients.

Module Size (KB) Dependencies
jsr:@iuioiua/redis 17.51 3
jsr:@db/redis 214.31 34
npm:ioredis 894.69 10
npm:redis 951.12 9

Note: Results were produced using deno info <module> on March 9, 2025.