Redis
Production state adapter using the official redis package.
The recommended state adapter for production. Uses the official redis package.
Installation
pnpm add @chat-adapter/state-redisUsage
createRedisState() auto-detects the REDIS_URL environment variable, so you can call it with no arguments:
import { Chat } from "chat";
import { createRedisState } from "@chat-adapter/state-redis";
const bot = new Chat({
userName: "mybot",
adapters: { /* ... */ },
state: createRedisState(),
});To provide a URL explicitly:
const state = createRedisState({ url: "redis://localhost:6379" });Using an existing client
If you already have a connected Redis client, pass it directly:
import { createClient } from "redis";
const client = createClient({ url: "redis://localhost:6379" });
await client.connect();
const state = createRedisState({ client });Key prefix
All keys are namespaced under a configurable prefix (default: "chat-sdk"):
const state = createRedisState({
url: process.env.REDIS_URL!,
keyPrefix: "my-bot",
});Configuration
| Option | Required | Description |
|---|---|---|
url | No* | Redis connection URL (auto-detected from REDIS_URL) |
client | No | Existing redis client instance |
keyPrefix | No | Prefix for all keys (default: "chat-sdk") |
logger | No | Logger instance (defaults to ConsoleLogger("info")) |
*Either url, REDIS_URL env var, or client is required.
Environment variables
REDIS_URL=redis://localhost:6379For serverless deployments (Vercel, AWS Lambda), use a serverless-compatible Redis provider like Upstash.
Key structure
{keyPrefix}:subscriptions - SET of subscribed thread IDs
{keyPrefix}:lock:{threadId} - Lock key with TTLProduction recommendations
- Use Redis 6.0+ for best performance
- Enable Redis persistence (RDB or AOF)
- Use Redis Cluster for high availability
- Set appropriate memory limits
Features
- Persistent subscriptions across restarts
- Distributed locking across multiple instances
- Automatic reconnection
- Key prefix namespacing