diff --git a/docs/cache.md b/docs/cache.md index 4b09d06..b3d24d9 100644 --- a/docs/cache.md +++ b/docs/cache.md @@ -1,17 +1,35 @@ # Кэширование -## `options.cache` +Три параметра (`cache`, `key`, `maxage`) позволяют закэшировать блок и при последующем запуске брать результат из кэша. + +Пример: -Эти три параметра позволяют закэшировать блок и при последующем запуске брать результат из кэша. +```js +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` Для начала нужно задать кэш, в который мы будем писать и из которого будем читать данные. -Кэш это объект с двумя методами: +Кэш – это интерфейс с двумя методами: -```js -const cache = { - get: function( { key, context } ) { ... }, - set: function( { key, value, maxage } ) { ... }, -}; +```typescript +export interface CacheInterface { + get: ({ key }: { key: string }) => Promise; + set: ({ key, value, maxage }: { key: string; value: Result; maxage?: number }) => Promise; +} ``` * Метод `get` должен вернуть данные, соответствующие переданному ключу. Синхронно или в виде промиса. @@ -24,34 +42,30 @@ const cache = { const cache = new de.Cache(); ``` -Он хранит все просто в памяти, `maxage` задается в миллисекундах. Нет ограничений на количество записей. -Так что для каких-то серьезных ситуаций лучше его не использовать, а использовать [descript2-memcached](https://github.com/doochik/descript2-memcached). +Он хранит все просто в памяти, нет ограничений на количество записей. +Так что для каких-то серьезных ситуаций лучше его не использовать, а использовать [descript-redis-cache](https://www.npmjs.com/package/descript-redis-cache). -Задаем блоку кэш: +## `options.key` -```js -const cache = new de.Cache(); +Обязательный параметр `key` задает ключ хранения. +Ключ может быть строкой или вычисляться динамически. -const block = de.block( { - options: { - cache: cache, - } -} ); +```js +options: { + // Кэшируем по имени метода и параметру id. + key: ( { params } ) => `my_method:id=${ params.id }`, +}, ``` +## `options.maxage` -## `options.key`, `options.maxage` - -Параметры `key` и `maxage` задают ключ и срок хранения: +Необязательный параметры `maxage` задает срок хранения. +Для `de.Cache` задается в миллисекундах (0 - вечное хранение), +но в если реализовать свой интерфейс кеша, то можно задать любой срок хранения. ```js options: { - // Кэшируем по имени метода и параметру id. - key: ( { params } ) => `my_method:id=${ params.id }`, - // Храним 1 час. - maxage: 60 * 60 * 1000, - // Задаем в каком кэше все храним. - cache: cache, + // Храним 1 секунду. + maxage: 1000, }, ``` -