power-redis
Version:
Production-grade Redis abstraction for Node.js with strict key formatting, safe JSON serialization, advanced list/queue operations, SCAN-based pattern tools, TTL helpers, batch UNLINK deletion, and Redis Streams support. Perfect for high-load microservice
81 lines (78 loc) • 4.68 kB
TypeScript
type JsonPrimitive = string | number | boolean | null;
type JsonPrimitiveOrUndefined = JsonPrimitive | undefined;
type Jsonish = JsonPrimitive | {
[key: string]: Jsonish;
} | Jsonish[];
interface RedisMultiLike {
set(key: string, value: string): this;
set(key: string, value: string, ex: 'EX', ttlSec: number): this;
rpush(key: string, ...values: string[]): this;
lpush(key: string, ...values: string[]): this;
lrange(key: string, start: number, stop: number): this;
ltrim(key: string, start: number, stop: number): this;
lrem(key: string, count: number, value: string): this;
zrem(key: string, ...members: string[]): this;
zadd(key: string, score: number, member: string): this;
expire(key: string, ttlSec: number): this;
exec(): Promise<Array<[Error | null, any]>>;
}
interface IORedisLike {
status: 'ready' | 'connecting' | 'reconnecting' | string;
scan(cursor: string, matchKeyword: 'MATCH', pattern: string, countKeyword: 'COUNT', count: number): Promise<[nextCursor: string, keys: string[]]>;
get(key: string): Promise<string | null>;
mget(...keys: string[]): Promise<Array<string | null>>;
set(key: string, value: string): Promise<'OK'>;
set(key: string, value: string, ex: 'EX', ttlSec: number): Promise<'OK'>;
mset(...keyValues: string[]): Promise<'OK'>;
incr(key: string, ttl?: number): Promise<number>;
llen(key: string): Promise<number>;
lrange(key: string, start: number, stop: number): Promise<string[]>;
lpop(key: string, count?: number): Promise<string[] | string | null>;
rpush(key: string, ...values: string[]): Promise<number>;
lpush(key: string, ...values: string[]): Promise<number>;
ltrim(key: string, start: number, stop: number): Promise<'OK'>;
lrem(key: string, count: number, value: string): Promise<number>;
lmove?(source: string, destination: string, whereFrom: 'LEFT' | 'RIGHT', whereTo: 'LEFT' | 'RIGHT'): Promise<string | null>;
rpoplpush?(source: string, destination: string): Promise<string | null>;
zadd(key: string, ...args: (string | number)[]): Promise<number>;
zrem(key: string, ...members: string[]): Promise<number>;
zrangebyscore(key: string, min: number | string, max: number | string, ...args: (string | number)[]): Promise<string[]>;
expire(key: string, ttlSec: number): Promise<number>;
unlink?(...keys: string[]): Promise<number>;
del(...keys: string[]): Promise<number>;
multi(): RedisMultiLike;
script?(subcommand: 'LOAD', script: string): Promise<string>;
evalsha?(sha1: string, numKeys: number, ...args: string[]): Promise<any>;
eval?(script: string, numKeys: number, ...args: string[]): Promise<any>;
}
declare abstract class PowerRedis {
readonly isStrictCheckConnection: boolean;
abstract redis: IORedisLike;
checkConnection(): boolean;
toPatternString(...parts: Array<string | number>): string;
toKeyString(...parts: Array<string | number>): string;
fromKeyString(key: string): Array<string>;
fromPayload(value: string | null): Jsonish;
toPayload(value: Jsonish): string;
lpopCountCompat(key: string, count: number): Promise<string[]>;
keys(pattern: string, limit?: number, scanSize?: number): Promise<string[]>;
getOne(key: string): Promise<Jsonish | null>;
getMany(pattern: string, limit?: number, scanSize?: number, chunkSize?: number): Promise<Record<string, Jsonish>>;
getList(key: string, limit?: number, remove?: boolean): Promise<Jsonish[]>;
getListIterator(key: string, limit?: number, remove?: boolean): AsyncGenerator<Jsonish[], void, unknown>;
setOne(key: string, value: any, ttlSec?: number): Promise<'OK'>;
setMany(values: Array<{
key: string;
value: any;
}>, ttlSec?: number): Promise<number>;
pushOne(key: string, value: any, ttlSec?: number): Promise<number>;
pushMany(key: string, values: Array<any>, ttlSec?: number): Promise<number>;
dropMany(pattern: string, size?: number): Promise<number>;
incr(key: string, ttl?: number): Promise<number>;
expire(key: string, ttl: number): Promise<number>;
script(subcommand: 'LOAD', script: string): Promise<string>;
xgroup(script: string, stream: string, group: string, from: string, mkstream: string): Promise<void>;
xreadgroup(groupKey: string, group: string, consumer: string, blockKey: string, block: number, countKey: string, count: number, streamKey: string, stream: string, condition: string): Promise<Array<any>>;
pttl(key: string): Promise<number>;
}
export { type IORedisLike, type JsonPrimitive, type JsonPrimitiveOrUndefined, type Jsonish, PowerRedis, type RedisMultiLike };