import { KeyValueCacheStructure } from '../models'; import { IStorage } from '../interfaces'; export declare abstract class AbstractKeyValueStorage implements IStorage { static readonly CLEAN_RECORDS_PERCENT: number; static readonly TAGS_PREFIX: string; static readonly DATA_PREFIX: string; protected maintenanceProcessing: boolean; /** * Сохранение данных по ключу на указанное время, с учетом переданных тегов. * При ошибке сохранения запускается метод очистки хранилища (т.к. ошибка могла произойти из-за нехватки места) * и после очистки сохранение пытается выполниться еще раз. * @param key Ключ, по которому необходимо сохранить данные * @param value Данные для сохранения * @param expired Количество секунд в течение которых данные будут храниться * @param tags Массив тегов, которыми необходимо пометить набор данных */ set(key: string, value: any, expired?: number, tags?: string[]): Promise; /** * Получение значения по ключу. * Если значение существует, но истек срок его хранения - удаляем эту запись и все с ней связанное из хранилища. * @param key Ключ, по которому необходимо получить значение */ get(key: string): Promise; /** * Удаление данных из хранилища по указанному тегу. * @param tag Имя тега по которому необходимо удалить данные */ removeByTag(tag: string): Promise; /** * Удаление данных из хранилища по ключу. * @param key Ключ по которым необходимо удалить данные */ remove(key: string): Promise; clear(): Promise; maintenance(): Promise; /** * Генерирует имя для использования в качестве ключа * @param args Аргументы участвующие в формировании ключа */ getCacheKey(...args: any[]): string; /** * Установка значения в хранилище и помечание его тегами * @param key Ключ по которому надо сохранить значение * @param item Структура элемента который надо сохранить */ protected setInternal(key: string, item: KeyValueCacheStructure): Promise; /** * Удаление значения по указанному ключу, помеченное переданными тегами. * Удаляется ключ с его значением, из тегов которыми он был помечен удаляется этот ключ * (если тег после удаления ключа становится пустым - он удаляется также) * @param key Ключ по которому надо удалить данные * @param tags Массив тегов которыми помечена удаляемая запись */ protected removeInternal(key: string, tags: string[]): Promise; /** * Формирует имя тега для сохранения в хранилище * @param tag Оригинальное имя тега (которое указал программист) */ protected prepareTag(tag: string): string; /** * Формирует имя ключа для сохранения в хранилище * @param key Оригинальное имя ключа (которое указал программист) */ protected prepareKey(key: string): string; protected abstract _set(key: string, value: any): Promise; protected abstract _get(key: string): Promise; protected abstract _remove(key: string): Promise; protected abstract _clear(): Promise; protected abstract _getStorageInstance(): Promise; }