Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

CacheManager

Обзор

CacheManager основан на node-cache-manager и предоставляет NocoBase функциональность управления модулями кеширования. Встроенные типы кеша:

  • memorylru-cache, предоставляемый по умолчанию node-cache-manager.
  • redis – поддерживается node-cache-manager-redis-yet.

Дополнительные типы можно зарегистрировать и расширить через API.

Основные понятия

  • Store: Определяет способ кеширования, включающий фабричный метод для создания кешей и другие связанные конфигурации. Каждый способ кеширования имеет уникальный идентификатор, который предоставляется при регистрации. Уникальные идентификаторы для двух встроенных способов кеширования — это memory и redis.

  • Фабричный метод Store: Метод, предоставляемый node-cache-manager и связанными пакетами расширений для создания кешей. Например, 'memory', предоставляемый по умолчанию node-cache-manager, или redisStore, предоставляемый node-cache-manager-redis-yet. Это соответствует первому параметру метода caching в node-cache-manager.

  • Cache: Класс, инкапсулированный NocoBase, который предоставляет методы для работы с кешем. При фактическом использовании кеша вы работаете с экземпляром Cache. Каждый экземпляр Cache имеет уникальный идентификатор, который можно использовать в качестве пространства имён для различения различных модулей.

Методы класса

constructor()

Сигнатура

  • constructor(options?: CacheManagerOptions)

Типы

export type CacheManagerOptions = Partial<{
  defaultStore: string;
  stores: {
    [storeType: string]: StoreOptions;
  };
}>;

type StoreOptions = {
  store?: 'memory' | FactoryStore<Store, any>;
  close?: (store: Store) => Promise<void>;
  // глобальная конфигурация
  [key: string]: any;
};

Подробности

CacheManagerOptions
СвойствоТипОписание
defaultStorestringУникальный идентификатор для типа кеша по умолчанию.
storesRecord<string, StoreOptions>Регистрирует типы кеша. Ключом является уникальный идентификатор типа кеша, а значением — объект, содержащий метод регистрации и глобальную конфигурацию для этого типа кеша.
В node-cache-manager метод для создания кеша — это await caching(store, config). Здесь необходимо предоставить объект StoreOptions.
StoreOptions
СвойствоТипОписание
storememory | FactoryStore<Store, any>Фабричный метод store, соответствующий первому параметру caching.
close(store: Store) => Promise<void>Необязательно. Для промежуточного ПО, такого как Redis, требующего соединения, необходимо предоставить метод обратного вызова для закрытия соединения. Входным параметром является объект, возвращаемый фабричным методом store.
[key: string]anyДругие глобальные конфигурации store, соответствующие второму параметру caching.

Параметры options по умолчанию

import { redisStore, RedisStore } from 'cache-manager-redis-yet';

const defaultOptions: CacheManagerOptions = {
  defaultStore: 'memory',
  stores: {
    memory: {
      store: 'memory',
      // глобальная конфигурация
      max: 2000,
    },
    redis: {
      store: redisStore,
      close: async (redis: RedisStore) => {
        await redis.client.quit();
      },
    },
  },
};

Параметр options будет объединён с параметрами по умолчанию. Свойства, уже присутствующие в параметрах по умолчанию, можно опустить. Например:

const cacheManager = new CacheManager({
  stores: {
    defaultStore: 'redis',
    redis: {
      // redisStore уже предоставлен в параметрах по умолчанию, поэтому достаточно указать только конфигурацию redisStore.
      url: 'redis://localhost:6379',
    },
  },
});

registerStore()

Регистрирует новый способ кеширования. Например:

import { redisStore } from 'cache-manager-redis-yet';

cacheManager.registerStore({
  // уникальный идентификатор store
  name: 'redis',
  // фабричный метод для создания store
  store: redisStore,
  // закрытие соединения store
  close: async (redis: RedisStore) => {
    await redis.client.quit();
  },
  // глобальная конфигурация
  url: 'xxx',
});

Сигнатура

  • registerStore(options: { name: string } & StoreOptions)

createCache()

Создаёт кеш. Например:

await cacheManager.createCache({
  name: 'default', // уникальный идентификатор кеша
  store: 'memory', // уникальный идентификатор store
  prefix: 'mycache', // автоматически добавляет префикс 'mycache:' к ключам кеша, необязательно
  // другие конфигурации store, пользовательские настройки будут объединены с глобальной конфигурацией store
  max: 2000,
});

Сигнатура

  • createCache(options: { name: string; prefix?: string; store?: string; [key: string]: any }): Promise<Cache>

Подробности

options
СвойствоТипОписание
namestringУникальный идентификатор кеша.
storestringУникальный идентификатор store.
prefixstringНеобязательно, префикс ключа кеша.
[key: string]anyДругие пользовательские параметры конфигурации, связанные со store.

Если store опущен, будет использоваться defaultStore. В этом случае способ кеширования будет меняться в соответствии со способом кеширования по умолчанию в системе.

При отсутствии пользовательских конфигураций возвращается пространство кеша по умолчанию, созданное глобальной конфигурацией и используемое текущим способом кеширования. Рекомендуется добавить prefix во избежание конфликтов ключей.

// Использование кеша по умолчанию с глобальной конфигурацией
await cacheManager.createCache({ name: 'default', prefix: 'mycache' });
Cache

См. Cache

getCache()

Получает соответствующий кеш.

cacheManager.getCache('default');

Сигнатура

  • getCache(name: string): Cache

flushAll()

Сбрасывает все кеши.

await cacheManager.flushAll();

close()

Закрывает все соединения промежуточного ПО кеширования.

await cacheManager.close();