Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 42 additions & 28 deletions docs/cache.md
Original file line number Diff line number Diff line change
@@ -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<Result> {
get: ({ key }: { key: string }) => Promise<Result | undefined>;
set: ({ key, value, maxage }: { key: string; value: Result; maxage?: number }) => Promise<void>;
}
```

* Метод `get` должен вернуть данные, соответствующие переданному ключу. Синхронно или в виде промиса.
Expand All @@ -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,
},
```

Loading