UNPKG

@daiso-tech/core

Version:

The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.

69 lines (68 loc) 2.97 kB
/** * @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<Context> { daiso_cache_increment(key: string, number: string): Result<number, Context>; } } /** * 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<string>; }; /** * 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<TType = unknown> implements ICacheAdapter<TType> { 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 initIncrementCommand; get(_context: IReadableContext, key: string): Promise<TType | null>; getAndRemove(_context: IReadableContext, key: string): Promise<TType | null>; add(_context: IReadableContext, key: string, value: TType, ttl: TimeSpan | null): Promise<boolean>; put(_context: IReadableContext, key: string, value: TType, ttl: TimeSpan | null): Promise<boolean>; update(_context: IReadableContext, key: string, value: TType): Promise<boolean>; increment(_context: IReadableContext, key: string, value: number): Promise<boolean>; removeMany(_context: IReadableContext, keys: Array<string>): Promise<boolean>; removeAll(_context: IReadableContext): Promise<void>; removeByKeyPrefix(_context: IReadableContext, prefix: string): Promise<void>; }