17.6k GitHub stars and counting — redis/node-redis is a TypeScript project TopGit is tracking across repositories on the platform. Redis Node.js client
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
node-redis is a modern, high performance Redis client for Node.js.
How do I Redis?
Learn for free at Redis University
Build faster with the Redis Launchpad
Try the Redis Cloud
Dive in developer tutorials
Join the Redis community
Work at Redis
Installation
Start a redis via docker:
docker run -p 6379:6379 -d redis:8.0-rc1
To install node-redis, simply:
npm install redis
"redis" is the "whole in one" package that includes all the other packages. If you only need a subset of the commands,
you can install the individual packages. See the list below.
Packages
Name
Description
redis
The client with all the "redis-stack" modules
@redis/client
The base clients (i.e RedisClient, RedisCluster, etc.)
@redis/bloom
Redis Bloom commands
@redis/json
Redis JSON commands
@redis/search
RediSearch commands
@redis/time-series
Redis Time-Series commands
@redis/entraid
Secure token-based authentication for Redis clients using Microsoft Entra ID
Looking for a high-level library to handle object mapping?
See redis-om-node!
The above code connects to localhost on port 6379. To connect to a different host or port, use a connection string in
the format redis[s]://[[username][:password]@][host][:port][/db-number]:
You can also use discrete parameters, UNIX sockets, and even TLS to connect. Details can be found in
the client configuration guide.
To check if the client is connected and ready to send commands, use client.isReady which returns a boolean.
client.isOpen is also available. This returns true when the client's underlying socket is open, and false when it
isn't (for example when the client is still connecting or reconnecting after a network error).
Redis Commands
There is built-in support for all of the out-of-the-box Redis commands. They are exposed
using the raw Redis command names (HSET, HGETALL, etc.) and a friendlier camel-cased version (hSet, hGetAll,
etc.):
You can also watch keys by calling
.watch(). Your transaction will abort if any of the watched keys change.
Blocking Commands
In v4, RedisClient had the ability to create a pool of connections using an "Isolation Pool" on top of the "main"
connection. However, there was no way to use the pool without a "main" connection:
SCAN results can be looped over
using async iterators:
for await (const keys of client.scanIterator()) {
console.log(keys, await client.mGet(keys));
}
This works with HSCAN, SSCAN, and ZSCAN too:
for await (const { field, value } of client.hScanIterator("hash")) {
}
for await (const member of client.sScanIterator("set")) {
}
for await (const { score, value } of client.zScanIterator("sorted-set")) {
}
You can override the default options by providing a configuration object:
Note: CAS/CAD operations were introduced in Redis 8.4
// Conditionally update only if the current value matches
await client.set("key", "new-value", { condition: "IFEQ", matchValue: "old-value" });
// Conditionally delete only if the current value matches
await client.delEx("key", { condition: "IFEQ", matchValue: "expected-value" });
Local Digest
Note: This feature requires the optional @node-rs/xxhash peer dependency.
The digest helper computes an XXH3 64-bit hash locally, matching what Redis computes via the DIGEST command. This is useful for CAS/CAD operations with large values where comparing the full value would be inefficient.
The QUIT command has been deprecated in Redis 7.2 and should now also be considered deprecated in Node-Redis. Instead
of sending a QUIT command to the server, the client can simply close the network connection.
client.QUIT/quit() is replaced by client.close(). and, to avoid confusion, client.disconnect() has been renamed to
client.destroy().
client.destroy();
Client Side Caching
Client Side Caching keeps command replies in a local cache. The Redis server notifies the client when cached replies are no longer valid. Requires RESP3.
const client = createClient({
clientSideCache: {
ttl: 0, // Time-to-live (0 = no expiration)
maxEntries: 0, // Maximum entries (0 = unlimited)
evictPolicy: "LRU", // Eviction policy: "LRU" or "FIFO"
trackingMode: "optin" // "plain" (default), "optin", or "optout"
}
});
await client.connect();
await client.withCommandOptions({ cache: true }).get("user:42"); // cached
await client.get("counter:hits"); // not cached in "optin" mode
See Client Side Caching for tracking modes, choosing what is cached, and more.
Auto-Pipelining
Node Redis will automatically pipeline requests that are made during the same "tick".
Of course, if you don't do something with your Promises you're certain to
get unhandled Promise exceptions. To take
advantage of auto-pipelining and handle your Promises, use Promise.all().
Look at the sentinel section to figure out how to use this library with sentinels.
Programmability
See the Programmability overview.
Clustering
Check out the Clustering Guide when using Node Redis to connect to a Redis Cluster.
OpenTelemetry
OpenTelemetry Metrics Instrumentation
import { createClient, OpenTelemetry } from "redis";
OpenTelemetry.init({
metrics: {
enabled: true
}
});
const client = createClient()
await client.connect();
// ... use the client as usual
Important: Initializing OpenTelemetry only enables node-redis metrics instrumentation and requires both @opentelemetry/api and an OpenTelemetry SDK configured in your application.
Important: Initialize OpenTelemetry before creating Redis clients.
For SDK/provider/exporter setup, verification, and advanced configuration, see:
OpenTelemetry Metrics docs
OpenTelemetry Metrics example
Diagnostics Channel
Node Redis publishes telemetry through Node.js diagnostics_channel, enabling APM tools and custom instrumentation to observe commands, connections, and internal events. See the Diagnostics Channel guide for the full channel reference and usage examples.
Events
The Node Redis client class is an Nodejs EventEmitter and it emits an event each time the network status changes:
Name
When
Listener arguments
connect
Initiating a connection to the server
No arguments
ready
Client is ready to use
No arguments
end
Connection has been closed (via .close() or .destroy())
No arguments
error
An error has occurred—usually a network issue such as "Socket closed unexpectedly"
(error: Error)
reconnecting
Client is trying to reconnect to the server
No arguments
terminated
Reconnection has stopped because reconnectStrategy returned false or an Error; emitted before the companion error
(cause: Error)
sharded-channel-moved
See here
See here
invalidate
Client Tracking is on with emitInvalidate and a key is invalidated
(key: RedisItem | null)
:warning: You MUST listen to error events. If a client doesn't have at least one error listener registered and
an error occurs, that error will be thrown and the Node.js process will exit. See the > EventEmitter docs for more details.
The client will not emit any other events beyond those listed above.
Supported Redis versions
Node Redis is supported with the following versions of Redis:
See Supported Redis Versions.
Migration
From V3 to V4
From V4 to V5
V5
Contributing
If you'd like to contribute, check out the contributing guide.
Thank you to all the people who already contributed to Node Redis!
License
This repository is licensed under the "MIT" license. See LICENSE.
The most recent commit recorded on redis/node-redis was 3 months ago, based on the GitHub push timestamp. The repository has 2.0k forks — one of the better signals of community interest.
How does redis/node-redis compare to other Backend projects?
redis/node-redis is tracked by TopGit in the Backend category, with 17.6k GitHub stars and written in TypeScript. Browse the Backend topic page on TopGit to compare it against similar projects by stars and activity.
How many stars does redis/node-redis have?
redis/node-redis has 17.6k GitHub stars — refresh the page for the live number, or check github.com/redis/node-redis. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is redis/node-redis open source?
Yes — redis/node-redis ships under the MIT license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/redis/node-redis.
What is redis/node-redis?
redis/node-redis (redis/node-redis) is a TypeScript project on GitHub. From the project's own README: Redis Node.js client
Where do I read more about redis/node-redis?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/redis/node-redis is the definitive source.
Read full README in the tab above.
Curious whether node-redis is right for you?
Let ChatGPT, Claude, or Perplexity look into it — click below and see what AI actually says about node-redis.