@ticatec/redis-client
Version:
A lightweight TypeScript wrapper around ioredis with singleton pattern support, mock Redis for testing, and abstract caching framework.
159 lines (158 loc) • 5.75 kB
TypeScript
import Redis from "ioredis";
import log4js from "log4js";
/**
* Redis客户端工具 - 基于ioredis的轻量级封装
* 提供单例模式的Redis客户端,支持真实Redis和Mock Redis切换
* @class RedisClient
*/
export default class RedisClient {
private static instance;
protected readonly logger: log4js.Logger;
/**
* Redis客户端实例
* @private
* @type {Redis}
*/
private _client;
private constructor();
/**
* 初始化Redis连接
* @static
* @param {any} conf - Redis配置参数,传入null时使用Mock Redis
* @returns {Promise<void>}
*/
static init(conf: any): Promise<void>;
/**
* 获取Redis客户端实例
* @readonly
* @type {Redis}
* @returns {Redis} ioredis客户端实例
*/
get client(): Redis;
/**
* 获取RedisClient单例实例
* @static
* @returns {RedisClient} RedisClient实例
* @throws {Error} 如果未先调用init方法初始化
*/
static getInstance(): RedisClient;
/**
* 设置一个键值对
* @param {string} key - Redis键名
* @param {any} value - 要存储的值,对象类型会自动JSON序列化
* @param {number} [seconds=0] - 过期时间(秒),0表示永不过期
* @returns {Promise<void>}
*/
set(key: string, value: any, seconds?: number): Promise<void>;
/**
* 获取指定键的值
* @param {string} key - Redis键名
* @returns {Promise<string | Buffer | number | null>} 键对应的值,不存在时返回null
*/
get(key: string): Promise<string | Buffer | number>;
/**
* 获取指定键的值并解析为JSON对象
* @param {string} key - Redis键名
* @returns {Promise<any>} 解析后的对象,解析失败或不存在时返回null
*/
getObject(key: string): Promise<any>;
/**
* 删除指定的键
* @param {string} key - 要删除的Redis键名
* @returns {Promise<void>}
*/
del(key: string): Promise<void>;
/**
* 设置键的过期时间
* @param {string} key - Redis键名
* @param {number} seconds - 过期时间(秒)
* @returns {Promise<void>}
*/
expiry(key: string, seconds: number): Promise<void>;
/**
* 设置哈希表字段
* @param {string} key - Redis键名
* @param {any} data - 哈希表数据对象
* @param {number} [seconds=0] - 过期时间(秒),0表示永不过期
* @returns {Promise<void>}
*/
hset(key: string, data: any, seconds?: number): Promise<void>;
/**
* 获取哈希表中指定字段的值
* @param {string} key - Redis键名
* @param {string} name - 哈希表字段名
* @returns {Promise<string | null>} 字段值,不存在时返回null
*/
hget(key: string, name: string): Promise<string | null>;
/**
* 获取哈希表中所有字段和值
* @param {string} key - Redis键名
* @returns {Promise<Record<string, string>>} 包含所有字段和值的对象
*/
hgetall(key: string): Promise<Record<string, string>>;
/**
* 仅在字段不存在时设置哈希表字段值
* @param {string} key - Redis键名
* @param {string} name - 哈希表字段名
* @param {string | Buffer | number} value - 字段值
* @returns {Promise<void>}
*/
hsetnx(key: string, name: string, value: string | Buffer | number): Promise<void>;
/**
* 向集合添加成员
* @param {string} key - Redis键名
* @param {Array<string | Buffer | number>} arr - 要添加的成员数组
* @param {number} seconds - 过期时间(秒),大于0时设置过期时间
* @returns {Promise<void>}
*/
sadd(key: string, arr: Array<string | Buffer | number>, seconds: number): Promise<void>;
/**
* 获取集合中成员的数量
* @param {string} key - Redis键名
* @returns {Promise<number>} 集合成员数量
*/
scard(key: string): Promise<number>;
/**
* 检查值是否为集合成员
* @param {string} key - Redis键名
* @param {any} value - 要检查的值
* @returns {Promise<boolean>} 是否为集合成员
*/
isSetMember(key: string, value: any): Promise<boolean>;
/**
* 向列表尾部添加元素
* @param {string} key - Redis键名
* @param {any} data - 要添加的数据,对象类型会自动JSON序列化
* @param {number} [seconds=0] - 过期时间(秒),0表示永不过期
* @returns {Promise<void>}
*/
rpush(key: string, data: any, seconds?: number): Promise<void>;
/**
* 获取列表指定范围的元素
* @param {string} key - Redis键名
* @param {number} start - 开始索引
* @param {number} end - 结束索引(-1表示最后一个元素)
* @returns {Promise<string[]>} 指定范围的元素数组
*/
lrange(key: string, start: number, end: number): Promise<string[]>;
/**
* 获取列表指定范围的元素并解析为JSON对象
* @param {string} key - Redis键名
* @param {number} start - 开始索引
* @param {number} end - 结束索引(-1表示最后一个元素)
* @returns {Promise<Array<any>>} 解析后的对象数组
*/
lrangeObject(key: string, start: number, end: number): Promise<Array<any>>;
/**
* 获取列表长度
* @param {string} key - Redis键名
* @returns {Promise<number>} 列表长度
*/
llen(key: string): Promise<number>;
/**
* 移除并返回列表的第一个元素
* @param {string} key - Redis键名
* @returns {Promise<string | null>} 被移除的元素,列表为空时返回null
*/
lpop(key: string): Promise<string>;
}