@probitas/client-redis
Redis client for Probitas scenario testing framework.
This package provides a Redis client designed for integration testing of applications using Redis.
Features
- Data Structures: Strings, Hashes, Lists, Sets, Sorted Sets
- Pub/Sub: Publish and subscribe to channels
- Transactions: Atomic operations with MULTI/EXEC
- Raw Commands: Execute any Redis command via
command() - Resource Management: Implements
AsyncDisposablefor proper cleanup
Installation
deno add jsr:@probitas/client-redis
Quick Start
import { createRedisClient } from "@probitas/client-redis";
const client = await createRedisClient({
url: "redis://localhost:6379/0",
});
// String operations
await client.set("user:1:name", "Alice", { ex: 3600 });
const result = await client.get("user:1:name");
console.log("Name:", result.value);
// Hash operations
await client.hset("user:1", "email", "alice@example.com");
const email = await client.hget("user:1", "email");
console.log("Email:", email.value);
// List operations
await client.rpush("queue", "job1", "job2", "job3");
const job = await client.lpop("queue");
console.log("Job:", job.value);
await client.close();
Transactions
// Atomic transaction
const tx = client.multi();
tx.incr("counter");
tx.get("counter");
await tx.exec();
Pub/Sub
// Subscribe to a channel
const subscription = client.subscribe("events");
for await (const message of subscription) {
console.log("Received:", message.message);
break;
}
// Publish to a channel
await client.publish("events", JSON.stringify({ type: "update" }));
Connection Configuration
// Using URL string
const client1 = await createRedisClient({ url: "redis://localhost:6379" });
// Using URL with password and database
const client2 = await createRedisClient({ url: "redis://:secret@localhost:6379/1" });
// Using config object
const client3 = await createRedisClient({
url: { host: "localhost", port: 6379, password: "secret", db: 1 },
});
Using with using Statement
await using client = await createRedisClient({ url: "redis://localhost:6379" });
await client.set("test", "value");
const result = await client.get("test");
console.log(result.value);
// Client automatically closed when block exits
Related Packages
| Package | Description |
|---|---|
@probitas/client |
Core utilities and types |
@probitas/client-deno-kv |
Deno KV client |
Links
Installation
deno add jsr:@probitas/client-redisClasses
#RedisCommandError
class RedisCommandError extends RedisErrorRedisErrorError thrown when a Redis command fails.
Constructor
new RedisCommandError(message: string, options: RedisCommandErrorOptions)Properties
- readonly
namestring - readonly
kind"command" - readonly
commandstring
#RedisConnectionError
class RedisConnectionError extends RedisErrorRedisErrorError thrown when a Redis connection cannot be established.
Constructor
new RedisConnectionError(message: string, options?: RedisErrorOptions)Properties
- readonly
namestring - readonly
kind"connection"
#RedisError
class RedisError extends ClientErrorClientErrorBase error class for Redis client errors.
Constructor
new RedisError(message: string, _: unknown, options?: RedisErrorOptions)Properties
- readonly
namestring - readonly
code?string
#RedisScriptError
class RedisScriptError extends RedisErrorRedisErrorError thrown when a Redis Lua script fails.
Constructor
new RedisScriptError(message: string, options: RedisScriptErrorOptions)Properties
- readonly
namestring - readonly
kind"script" - readonly
scriptstring
Interfaces
#RedisArrayResult
interface RedisArrayResult<T = string> extends RedisResultBase<readonly T[]>Redis array result (LRANGE, SMEMBERS, etc.)
| Name | Description |
|---|---|
type | — |
Properties
- readonly
type"redis:array"
#RedisClient
interface RedisClient extends AsyncDisposableRedis client interface
Properties
Methods
get(key: string, options?: CommonOptions): Promise<RedisGetResult>Parameters
keystringoptions?CommonOptions
set(key: string, value: string, options?: RedisSetOptions): Promise<RedisSetResult>Parameters
keystringvaluestringoptions?RedisSetOptions
del(_: string[]): Promise<RedisCountResult>Parameters
_string[]
incr(key: string): Promise<RedisCountResult>Parameters
keystring
decr(key: string): Promise<RedisCountResult>Parameters
keystring
hget(key: string, field: string, options?: CommonOptions): Promise<RedisGetResult>Parameters
keystringfieldstringoptions?CommonOptions
hset(key: string, field: string, value: string, options?: CommonOptions): Promise<RedisCountResult>Parameters
keystringfieldstringvaluestringoptions?CommonOptions
hgetall(key: string, options?: CommonOptions): Promise<RedisHashResult>Parameters
keystringoptions?CommonOptions
hdel(key: string, _: string[]): Promise<RedisCountResult>Parameters
keystring_string[]
lpush(key: string, _: string[]): Promise<RedisCountResult>Parameters
keystring_string[]
rpush(key: string, _: string[]): Promise<RedisCountResult>Parameters
keystring_string[]
lpop(key: string): Promise<RedisGetResult>Parameters
keystring
rpop(key: string): Promise<RedisGetResult>Parameters
keystring
lrange(key: string, start: number, stop: number, options?: CommonOptions): Promise<RedisArrayResult>Parameters
keystringstartnumberstopnumberoptions?CommonOptions
llen(key: string): Promise<RedisCountResult>Parameters
keystring
sadd(key: string, _: string[]): Promise<RedisCountResult>Parameters
keystring_string[]
srem(key: string, _: string[]): Promise<RedisCountResult>Parameters
keystring_string[]
smembers(key: string, options?: CommonOptions): Promise<RedisArrayResult>Parameters
keystringoptions?CommonOptions
sismember(key: string, member: string): Promise<RedisCommonResult<boolean>>Parameters
keystringmemberstring
zadd(key: string, _: { score: number; member: string }[]): Promise<RedisCountResult>Parameters
keystring_{ score: number; member: string }[]
zrange(key: string, start: number, stop: number, options?: CommonOptions): Promise<RedisArrayResult>Parameters
keystringstartnumberstopnumberoptions?CommonOptions
zscore(key: string, member: string): Promise<RedisCommonResult<number | null>>Parameters
keystringmemberstring
publish(channel: string, message: string): Promise<RedisCountResult>Parameters
channelstringmessagestring
subscribe(channel: string): AsyncIterable<RedisMessage>Parameters
channelstring
multi(): RedisTransactioncommand<T = unknown>(cmd: string, _: unknown[]): Promise<RedisCommonResult<T>>Parameters
cmdstring_unknown[]
close(): Promise<void>#RedisClientConfig
interface RedisClientConfig extends CommonOptionsRedis client configuration.
| Name | Description |
|---|---|
url | Redis connection URL or configuration object. |
Properties
Redis connection URL or configuration object.
#RedisCommandErrorOptions
interface RedisCommandErrorOptions extends RedisErrorOptionsOptions for Redis command errors.
| Name | Description |
|---|---|
command | — |
Properties
- readonly
commandstring
#RedisCommonResult
interface RedisCommonResult<T = unknown> extends RedisResultBase<T>Redis operation result (common/generic)
| Name | Description |
|---|---|
type | — |
Properties
- readonly
type"redis:common"
#RedisConnectionConfig
interface RedisConnectionConfig extends CommonConnectionConfigRedis connection configuration.
Extends CommonConnectionConfig with Redis-specific options.
| Name | Description |
|---|---|
db | Database index. |
Properties
- readonly
db?numberDatabase index.
#RedisCountResult
interface RedisCountResult extends RedisResultBase<number>Redis numeric result (DEL, LPUSH, SADD, etc.)
| Name | Description |
|---|---|
type | — |
Properties
- readonly
type"redis:count"
#RedisErrorOptions
interface RedisErrorOptions extends ErrorOptionsOptions for Redis errors.
| Name | Description |
|---|---|
code | — |
Properties
- readonly
code?string
#RedisGetResult
interface RedisGetResult extends RedisResultBase<string | null>Redis GET result
| Name | Description |
|---|---|
type | — |
Properties
- readonly
type"redis:get"
#RedisHashResult
interface RedisHashResult extends RedisResultBase<Record<string, string>>Redis hash result (HGETALL)
| Name | Description |
|---|---|
type | — |
Properties
- readonly
type"redis:hash"
#RedisMessage
interface RedisMessageRedis Pub/Sub message
Properties
- readonly
channelstring - readonly
messagestring
#RedisResultBase
interface RedisResultBase<T = unknown>Base interface for Redis operation results. All Redis result types extend this interface.
Properties
- readonly
typestring - readonly
okboolean - readonly
valueT - readonly
durationnumber
#RedisScriptErrorOptions
interface RedisScriptErrorOptions extends RedisErrorOptionsOptions for Redis script errors.
| Name | Description |
|---|---|
script | — |
Properties
- readonly
scriptstring
#RedisSetOptions
interface RedisSetOptions extends CommonOptionsRedis SET options
| Name | Description |
|---|---|
ex | Expiration in seconds |
px | Expiration in milliseconds |
nx | Only set if key does not exist |
xx | Only set if key exists |
Properties
- readonly
ex?numberExpiration in seconds
- readonly
px?numberExpiration in milliseconds
- readonly
nx?booleanOnly set if key does not exist
- readonly
xx?booleanOnly set if key exists
#RedisSetResult
interface RedisSetResult extends RedisResultBase<"OK">Redis SET result
| Name | Description |
|---|---|
type | — |
Properties
- readonly
type"redis:set"
#RedisTransaction
interface RedisTransactionRedis transaction interface
Methods
get(key: string): thisParameters
keystring
set(key: string, value: string, options?: RedisSetOptions): thisParameters
keystringvaluestringoptions?RedisSetOptions
del(_: string[]): thisParameters
_string[]
incr(key: string): thisParameters
keystring
decr(key: string): thisParameters
keystring
hget(key: string, field: string): thisParameters
keystringfieldstring
hset(key: string, field: string, value: string): thisParameters
keystringfieldstringvaluestring
hgetall(key: string): thisParameters
keystring
hdel(key: string, _: string[]): thisParameters
keystring_string[]
lpush(key: string, _: string[]): thisParameters
keystring_string[]
rpush(key: string, _: string[]): thisParameters
keystring_string[]
lpop(key: string): thisParameters
keystring
rpop(key: string): thisParameters
keystring
lrange(key: string, start: number, stop: number): thisParameters
keystringstartnumberstopnumber
llen(key: string): thisParameters
keystring
sadd(key: string, _: string[]): thisParameters
keystring_string[]
srem(key: string, _: string[]): thisParameters
keystring_string[]
smembers(key: string): thisParameters
keystring
sismember(key: string, member: string): thisParameters
keystringmemberstring
zadd(key: string, _: { score: number; member: string }[]): thisParameters
keystring_{ score: number; member: string }[]
zrange(key: string, start: number, stop: number): thisParameters
keystringstartnumberstopnumber
zscore(key: string, member: string): thisParameters
keystringmemberstring
exec(): Promise<RedisArrayResult<unknown>>discard(): voidFunctions
#createRedisClient
async function createRedisClient(config: RedisClientConfig): Promise<RedisClient>Create a new Redis client instance.
The client provides comprehensive Redis data structure support including strings, hashes, lists, sets, sorted sets, pub/sub, and transactions.
Parameters
configRedisClientConfig- Redis client configuration
Returns
Promise<RedisClient> — A promise resolving to a new Redis client instance
Examples
Using URL string
const client = await createRedisClient({
url: "redis://localhost:6379/0",
});
await client.set("key", "value");
const result = await client.get("key");
console.log(result.value); // "value"
await client.close();
Using connection config object
const client = await createRedisClient({
url: {
host: "localhost",
port: 6379,
password: "secret",
db: 0,
},
});
Set with expiration
// Set key with 1 hour TTL
await client.set("session", sessionData, { ex: 3600 });
// Set key with 5 second TTL in milliseconds
await client.set("temp", data, { px: 5000 });
Hash operations
await client.hset("user:123", "name", "Alice");
await client.hset("user:123", "email", "alice@example.com");
const user = await client.hgetall("user:123");
console.log(user.value); // { name: "Alice", email: "alice@example.com" }
Pub/Sub
// Subscribe to channel
for await (const message of client.subscribe("events")) {
console.log("Received:", message.message);
}
// In another session
await client.publish("events", JSON.stringify({ type: "user.created" }));
Using await using for automatic cleanup
await using client = await createRedisClient({
url: "redis://localhost:6379",
});
await client.set("test", "value");
// Client automatically closed when scope exits
Type Aliases
#RedisResult
type RedisResult<T = unknown> = RedisCommonResult<T> | RedisGetResult | RedisSetResult | RedisCountResult | RedisArrayResult<T> | RedisHashResultUnion of all Redis result types.
