@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
import { createRedisClient } from "@probitas/client-redis";
const client = await createRedisClient({ url: "redis://localhost:6379" });
// Atomic transaction
const tx = client.multi();
tx.incr("counter");
tx.get("counter");
await tx.exec();
await client.close();
Pub/Sub
import { createRedisClient } from "@probitas/client-redis";
const client = await createRedisClient({ url: "redis://localhost:6379" });
// 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" }));
await client.close();
Connection Configuration
import { createRedisClient } from "@probitas/client-redis";
// 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 },
});
await client1.close();
await client2.close();
await client3.close();
Using with using Statement
import { createRedisClient } from "@probitas/client-redis";
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
#RedisArrayResultError
interface RedisArrayResultError<T = string> extends RedisArrayResultBase<T>Array result with Redis error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
valuenull
#RedisArrayResultFailure
interface RedisArrayResultFailure<T = string> extends RedisArrayResultBase<T>Array result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
valuenull
#RedisArrayResultSuccess
interface RedisArrayResultSuccess<T = string> extends RedisArrayResultBase<T>Successful array result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
valuereadonly T[]
#RedisClient
interface RedisClient extends AsyncDisposableRedis client interface
Properties
Methods
get(key: string, options?: RedisCommandOptions): Promise<RedisGetResult>Parameters
keystringoptions?RedisCommandOptions
set(
key: string,
value: string,
options?: RedisSetOptions,
): Promise<RedisSetResult>Parameters
keystringvaluestringoptions?RedisSetOptions
del(keys: string[], options?: RedisCommandOptions): Promise<RedisCountResult>Parameters
keysstring[]options?RedisCommandOptions
incr(key: string, options?: RedisCommandOptions): Promise<RedisCountResult>Parameters
keystringoptions?RedisCommandOptions
decr(key: string, options?: RedisCommandOptions): Promise<RedisCountResult>Parameters
keystringoptions?RedisCommandOptions
hget(
key: string,
field: string,
options?: RedisCommandOptions,
): Promise<RedisGetResult>Parameters
keystringfieldstringoptions?RedisCommandOptions
hset(
key: string,
field: string,
value: string,
options?: RedisCommandOptions,
): Promise<RedisCountResult>Parameters
keystringfieldstringvaluestringoptions?RedisCommandOptions
hgetall(key: string, options?: RedisCommandOptions): Promise<RedisHashResult>Parameters
keystringoptions?RedisCommandOptions
hdel(
key: string,
fields: string[],
options?: RedisCommandOptions,
): Promise<RedisCountResult>Parameters
keystringfieldsstring[]options?RedisCommandOptions
lpush(
key: string,
values: string[],
options?: RedisCommandOptions,
): Promise<RedisCountResult>Parameters
keystringvaluesstring[]options?RedisCommandOptions
rpush(
key: string,
values: string[],
options?: RedisCommandOptions,
): Promise<RedisCountResult>Parameters
keystringvaluesstring[]options?RedisCommandOptions
lpop(key: string, options?: RedisCommandOptions): Promise<RedisGetResult>Parameters
keystringoptions?RedisCommandOptions
rpop(key: string, options?: RedisCommandOptions): Promise<RedisGetResult>Parameters
keystringoptions?RedisCommandOptions
lrange(
key: string,
start: number,
stop: number,
options?: RedisCommandOptions,
): Promise<RedisArrayResult>Parameters
keystringstartnumberstopnumberoptions?RedisCommandOptions
llen(key: string, options?: RedisCommandOptions): Promise<RedisCountResult>Parameters
keystringoptions?RedisCommandOptions
sadd(
key: string,
members: string[],
options?: RedisCommandOptions,
): Promise<RedisCountResult>Parameters
keystringmembersstring[]options?RedisCommandOptions
srem(
key: string,
members: string[],
options?: RedisCommandOptions,
): Promise<RedisCountResult>Parameters
keystringmembersstring[]options?RedisCommandOptions
smembers(key: string, options?: RedisCommandOptions): Promise<RedisArrayResult>Parameters
keystringoptions?RedisCommandOptions
sismember(
key: string,
member: string,
options?: RedisCommandOptions,
): Promise<RedisCommonResult<boolean>>Parameters
keystringmemberstringoptions?RedisCommandOptions
zadd(
key: string,
entries: { score: number; member: string }[],
options?: RedisCommandOptions,
): Promise<RedisCountResult>Parameters
keystringentries{ score: number; member: string }[]options?RedisCommandOptions
zrange(
key: string,
start: number,
stop: number,
options?: RedisCommandOptions,
): Promise<RedisArrayResult>Parameters
keystringstartnumberstopnumberoptions?RedisCommandOptions
zscore(
key: string,
member: string,
options?: RedisCommandOptions,
): Promise<RedisCommonResult<number | null>>Parameters
keystringmemberstringoptions?RedisCommandOptions
publish(
channel: string,
message: string,
options?: RedisCommandOptions,
): Promise<RedisCountResult>Parameters
channelstringmessagestringoptions?RedisCommandOptions
subscribe(channel: string): AsyncIterable<RedisMessage>Parameters
channelstring
multi(): RedisTransactioncommand<T = any>(
cmd: string,
args: unknown[],
options?: RedisCommandOptions,
): Promise<RedisCommonResult<T>>Parameters
cmdstringargsunknown[]options?RedisCommandOptions
close(): Promise<void>#RedisClientConfig
interface RedisClientConfig extends CommonOptionsRedis client configuration.
| Name | Description |
|---|---|
url | Redis connection URL or configuration object. |
throwOnError | Whether to throw an error when operations fail. |
Properties
Redis connection URL or configuration object.
- readonly
throwOnError?booleanWhether to throw an error when operations fail.
When
true, failures will throw an error instead of returning a result withok: false. This can be overridden per-command.
#RedisCommandErrorOptions
interface RedisCommandErrorOptions extends RedisErrorOptionsOptions for Redis command errors.
| Name | Description |
|---|---|
command | — |
Properties
- readonly
commandstring
#RedisCommandOptions
interface RedisCommandOptions extends CommonOptionsRedis command options.
Extends CommonOptions with Redis-specific behavior options.
| Name | Description |
|---|---|
throwOnError | Whether to throw an error when the operation fails. |
Properties
- readonly
throwOnError?booleanWhether to throw an error when the operation fails.
When
true, failures will throw an error instead of returning a result withok: false.
#RedisCommonResultError
interface RedisCommonResultError<T = any> extends RedisCommonResultBase<T>Common result with Redis error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
valuenull
#RedisCommonResultFailure
interface RedisCommonResultFailure<T = any> extends RedisCommonResultBase<T>Common result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
valuenull
#RedisCommonResultSuccess
interface RedisCommonResultSuccess<T = any> extends RedisCommonResultBase<T>Successful common result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
valueT
#RedisConnectionConfig
interface RedisConnectionConfig extends CommonConnectionConfigRedis connection configuration.
Extends CommonConnectionConfig with Redis-specific options.
| Name | Description |
|---|---|
db | Database index. |
Properties
- readonly
db?numberDatabase index.
#RedisCountResultError
interface RedisCountResultError extends RedisCountResultBaseCount result with Redis error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
valuenull
#RedisCountResultFailure
interface RedisCountResultFailure extends RedisCountResultBaseCount result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
valuenull
#RedisCountResultSuccess
interface RedisCountResultSuccess extends RedisCountResultBaseSuccessful count result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
valuenumber
#RedisErrorOptions
interface RedisErrorOptions extends ErrorOptionsOptions for Redis errors.
| Name | Description |
|---|---|
code | — |
Properties
- readonly
code?string
#RedisGetResultError
interface RedisGetResultError extends RedisGetResultBaseGET result with Redis error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
valuenull
#RedisGetResultFailure
interface RedisGetResultFailure extends RedisGetResultBaseGET result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
valuenull
#RedisGetResultSuccess
interface RedisGetResultSuccess extends RedisGetResultBaseSuccessful GET result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
valuestring | null
#RedisHashResultError
interface RedisHashResultError extends RedisHashResultBaseHash result with Redis error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
valuenull
#RedisHashResultFailure
interface RedisHashResultFailure extends RedisHashResultBaseHash result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
valuenull
#RedisHashResultSuccess
interface RedisHashResultSuccess extends RedisHashResultBaseSuccessful hash result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
valueRecord<string, string>
#RedisMessage
interface RedisMessageRedis Pub/Sub message
Properties
- readonly
channelstring - readonly
messagestring
#RedisScriptErrorOptions
interface RedisScriptErrorOptions extends RedisErrorOptionsOptions for Redis script errors.
| Name | Description |
|---|---|
script | — |
Properties
- readonly
scriptstring
#RedisSetOptions
interface RedisSetOptions extends RedisCommandOptionsRedis 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
#RedisSetResultError
interface RedisSetResultError extends RedisSetResultBaseSET result with Redis error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
valuenull
#RedisSetResultFailure
interface RedisSetResultFailure extends RedisSetResultBaseSET result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
valuenull
#RedisSetResultSuccess
interface RedisSetResultSuccess extends RedisSetResultBaseSuccessful SET result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
value"OK"
#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(options?: RedisCommandOptions): Promise<RedisArrayResult<unknown>>Parameters
options?RedisCommandOptions
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
import { createRedisClient } from "@probitas/client-redis";
const client = await createRedisClient({
url: "redis://localhost:6379/0",
});
await client.set("key", "value");
const result = await client.get("key");
if (result.ok) {
console.log(result.value); // "value"
}
await client.close();
Using connection config object
import { createRedisClient } from "@probitas/client-redis";
const client = await createRedisClient({
url: {
host: "localhost",
port: 6379,
password: "secret",
db: 0,
},
});
await client.close();
Set with expiration
import { createRedisClient } from "@probitas/client-redis";
const client = await createRedisClient({ url: "redis://localhost:6379" });
const sessionData = JSON.stringify({ userId: "123" });
const data = "temporary value";
// 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 });
await client.close();
Hash operations
import { createRedisClient } from "@probitas/client-redis";
const client = await createRedisClient({ url: "redis://localhost:6379" });
await client.hset("user:123", "name", "Alice");
await client.hset("user:123", "email", "alice@example.com");
const user = await client.hgetall("user:123");
if (user.ok) {
console.log(user.value); // { name: "Alice", email: "alice@example.com" }
}
await client.close();
Pub/Sub
import { createRedisClient } from "@probitas/client-redis";
const client = await createRedisClient({ url: "redis://localhost:6379" });
// Subscribe to channel (this would run indefinitely in practice)
// for await (const message of client.subscribe("events")) {
// console.log("Received:", message.message);
// }
// Publish to channel
await client.publish("events", JSON.stringify({ type: "user.created" }));
await client.close();
Using await using for automatic cleanup
import { createRedisClient } from "@probitas/client-redis";
await using client = await createRedisClient({
url: "redis://localhost:6379",
});
await client.set("test", "value");
// Client automatically closed when scope exits
Types
#RedisArrayResult
type RedisArrayResult<T = string> = RedisArrayResultSuccess<T>
| RedisArrayResultError<T>
| RedisArrayResultFailure<T>Redis array result (LRANGE, SMEMBERS, etc.).
#RedisCommonResult
type RedisCommonResult<T = any> = RedisCommonResultSuccess<T>
| RedisCommonResultError<T>
| RedisCommonResultFailure<T>Redis operation result (common/generic).
Used for operations without a more specific result type.
#RedisCountResult
type RedisCountResult = RedisCountResultSuccess | RedisCountResultError | RedisCountResultFailureRedis numeric result (DEL, LPUSH, SADD, etc.).
#RedisFailureError
type RedisFailureError = RedisConnectionError | AbortError | TimeoutErrorError types that indicate the operation was not processed. These are errors that occur before the operation reaches the Redis server.
#RedisGetResult
type RedisGetResult = RedisGetResultSuccess | RedisGetResultError | RedisGetResultFailureRedis GET result.
#RedisHashResult
type RedisHashResult = RedisHashResultSuccess | RedisHashResultError | RedisHashResultFailureRedis hash result (HGETALL).
#RedisOperationError
type RedisOperationError = RedisCommandError | RedisScriptError | RedisErrorError types that indicate the operation was processed but failed. These are errors returned by the Redis server.
#RedisResult
type RedisResult<T = any> = RedisCommonResult<T>
| RedisGetResult
| RedisSetResult
| RedisCountResult
| RedisArrayResult<T>
| RedisHashResultUnion of all Redis result types.
#RedisSetResult
type RedisSetResult = RedisSetResultSuccess | RedisSetResultError | RedisSetResultFailureRedis SET result.
