Skip to content

Latest commit

 

History

History
73 lines (54 loc) · 3 KB

File metadata and controls

73 lines (54 loc) · 3 KB

Кэширование

Три параметра (cache, key, maxage) позволяют закэшировать блок и при последующем запуске брать результат из кэша.

Пример:

const cache = new de.Cache();

const block = de.block( {
    options: {
        //  Кэшируем по имени метода и параметру id.
        key: ( { params } ) => `my_method:id=${ params.id }`,
        //  Храним 1 час.
        maxage: 60 * 60 * 1000,
        //  Задаем в каком кэше все храним.
        cache: cache,
    },
} );

options.cache

Для начала нужно задать кэш, в который мы будем писать и из которого будем читать данные. Кэш – это интерфейс с двумя методами:

export interface CacheInterface<Result> {
    get: ({ key }: { key: string }) => Promise<Result | undefined>;
    set: ({ key, value, maxage }: { key: string; value: Result; maxage?: number }) => Promise<void>;
}
  • Метод get должен вернуть данные, соответствующие переданному ключу. Синхронно или в виде промиса.
  • Метод set соответственно, должен сохранить значение value по ключу key на период maxage. Результат работы set игнорируется.

Есть встроенный очень простой кэш de.Cache:

const cache = new de.Cache();

Он хранит все просто в памяти, нет ограничений на количество записей. Так что для каких-то серьезных ситуаций лучше его не использовать, а использовать descript-redis-cache.

cache также может быть функцией ({ params }) => Promise<CacheInterface<Result>>. Если функция выбросит ошибку, то блок продолжит выполнение без кэширования.

options.key

Обязательный параметр key задает ключ хранения. Ключ может быть строкой или вычисляться динамически.

options: {
    //  Кэшируем по имени метода и параметру id.
    key: ( { params } ) => `my_method:id=${ params.id }`,
},

options.maxage

Необязательный параметры maxage задает срок хранения. Для de.Cache задается в миллисекундах (0 - вечное хранение), но в если реализовать свой интерфейс кеша, то можно задать любой срок хранения.

options: {
    // Храним 1 секунду.
    maxage: 1000,
},