import { StorageInterface } from "../intefraces/storage.interface"; import { KeyValueCacheStructure } from "../models/key-value-cache-structure.model"; export declare abstract class AbstractKeyValueStorage implements StorageInterface { static readonly CLEAN_RECORDS_PERCENT: number; static readonly TAGS_PREFIX: string; static readonly DATA_PREFIX: string; protected maintenanceProcessing: boolean; protected maintenanceExceptKeys: string[]; /** * Сохранение данных по ключу на указанное время, с учетом переданных тегов. * При ошибке сохранения запускается метод очистки хранилища (т.к. ошибка могла произойти из-за нехватки места) * и после очистки сохранение пытается выполниться еще раз. * * @param {string} key Ключ, по которому необходимо сохранить данные * @param {any} value Данные для сохранения * @param {number} expired Количество секунд в течение которых данные будут храниться * @param {string[]} tags Массив тегов, которыми необходимо пометить набор данных * @returns {Promise} */ set(key: string, value: any, expired?: number, tags?: string[]): Promise; /** * Получение значения по ключу. * Если значение существует, но истек срок его хранения - удаляем эту запись и все с ней связанное из хранилища. * * @param {string} key Ключ, по которому необходимо получить значение * @returns {Promise} */ get(key: string): Promise; /** * Удаление данных из хранилища по указанному тегу. * * @param {string} tag Имя тега по которому необходимо удалить данные * @returns {Promise} */ removeByTag(tag: string): Promise; /** * Удаление данных из хранилища по ключу. * * @param {string} key Ключ по которым необходимо удалить данные * @returns {Promise} */ remove(key: string): Promise; /** * Очистка всего хранилища. * * @returns {Promise} */ clear(): Promise; /** * Очистка неиспользуемых/редко используемых данных, освобождение места. * * @returns {Promise} */ maintenance(): Promise; /** * Генерирует имя для использования в качестве ключа * * @param args Аргументы участвующие в формировании ключа * @returns {string} */ getCacheKey(...args: any[]): string; /** * Установка значения в хранилище и помечание его тегами * * @param {string} key Ключ по которому надо сохранить значение * @param {KeyValueCacheStructure} item Структура элемента который надо сохранить * @returns {Promise} */ protected setInternal(key: string, item: KeyValueCacheStructure): Promise; /** * Удаление значения по указанному ключу, помеченное переданными тегами. * Удаляется ключ с его значением, из тегов которыми он был помечен удаляется этот ключ * (если тег после удаления ключа становится пустым - он удаляется также) * * @param {string} key Ключ по которому надо удалить данные * @param {string[]} tags Массив тегов которыми помечена удаляемая запись * @returns {Promise} */ protected removeInternal(key: string, tags: string[]): Promise; /** * Формирует имя тега для сохранения в хранилище * * @param {string} tag Оригинальное имя тега (которое указал программист) * @returns {string} */ protected prepareTag(tag: string): string; /** * Формирует имя ключа для сохранения в хранилище * * @param {string} key Оригинальное имя ключа (которое указал программист) * @returns {string} */ 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; }