/** * @module Cache */ import { type Redis, type Result } from "ioredis"; import { type ICacheAdapter } from "../../../../cache/contracts/_module.js"; import { type IReadableContext } from "../../../../execution-context/contracts/_module.js"; import { type ISerde } from "../../../../serde/contracts/_module.js"; import { type TimeSpan } from "../../../../time-span/implementations/_module.js"; declare module "ioredis" { interface RedisCommander { daiso_cache_increment(key: string, number: string): Result; daiso_cache_get_or_add(key: string, value: string, ttlInMs: number): Result; } } /** * Configuration for `RedisCacheAdapter`. * Requires a Redis client and a serde for serialising cache values to strings. * * IMPORT_PATH: `"@daiso-tech/core/cache/redis-cache-adapter"` * @group Adapters */ export type RedisCacheAdapterSettings = { /** * The Redis client instance for cache operations. */ database: Redis; /** * Serde instance for serializing and deserializing cache values to and from strings. */ serde: ISerde; }; /** * To utilize the `RedisCacheAdapter`, you must install the [`"ioredis"`](https://www.npmjs.com/package/ioredis) package and supply a {@link ISerde | `ISerde`}, with adapter like {@link SuperJsonSerdeAdapter | `SuperJsonSerdeAdapter`}. * * IMPORT_PATH: `"@daiso-tech/core/cache/redis-cache-adapter"` * @group Adapters */ export declare class RedisCacheAdapter implements ICacheAdapter { private static isRedisTypeError; private readonly serde; private readonly database; /** * @example * ```ts * import { RedisCacheAdapter } from "@daiso-tech/core/cache/redis-cache-adapter"; * import { Serde } from "@daiso-tech/core/serde"; * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/super-json-serde-adapter" * import Redis from "ioredis"; * * const database = new Redis("YOUR_REDIS_CONNECTION_STRING"); * const serde = new Serde(new SuperJsonSerdeAdapter()); * const cacheAdapter = new RedisCacheAdapter({ * database, * serde, * }); * ``` */ constructor(settings: RedisCacheAdapterSettings); private initGetOrAddCommand; getOrAdd(key: string, valueToAdd: TType, ttl: TimeSpan | null, _context: IReadableContext): Promise; private initIncrementCommand; get(key: string, _context: IReadableContext): Promise; getAndRemove(key: string, _context: IReadableContext): Promise; add(key: string, value: TType, ttl: TimeSpan | null, _context: IReadableContext): Promise; put(key: string, value: TType, ttl: TimeSpan | null, _context: IReadableContext): Promise; update(key: string, value: TType, _context: IReadableContext): Promise; increment(key: string, value: number, _context: IReadableContext): Promise; removeMany(keys: Array, _context: IReadableContext): Promise; removeAll(_context: IReadableContext): Promise; removeByKeyPrefix(prefix: string, _context: IReadableContext): Promise; }