UNPKG

@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
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>; }