Промежуточное ПО, предоставляющее функциональность кэширования.
Промежуточное ПО Cache
может кэшировать StatusCode
, Headers
и Body
в Response
. Для уже закэшированного содержимого при последующей обработке запроса Cache
напрямую отправит клиенту данные, сохранённые в памяти.
Примечание: Этот плагин не кэширует Response
, у которого Body
является ResBody::Stream
. Если такой тип Response
встречается, Cache
просто пропустит запрос без ошибок.
CacheIssuer
предоставляет абстракцию для генерации ключей кэша. RequestIssuer
— одна из его реализаций, позволяющая определять ключ на основе частей URL и метода запроса (Method
). Вы также можете создать собственную логику генерации ключей. Ключ не обязательно должен быть строкой — подойдёт любой тип, удовлетворяющий ограничениям Hash + Eq + Send + Sync + 'static
.
CacheStore
отвечает за хранение и извлечение данных. MokaStore
— встроенная реализация кэша в памяти на основе moka
. Вы можете создать собственный механизм хранения.
Cache
— структура, реализующая Handler
. Внутри также есть поле skipper
, позволяющее пропускать запросы, которые не нужно кэшировать. По умолчанию используется MethodSkipper
, который пропускает все запросы, кроме Method::GET
.
Пример внутренней реализации:
Если вы ранее использовали кэширование в других фреймворках, следующие сопоставления помогут быстрее адаптироваться к реализации Salvo:
С Actix-web: В Actix-web плагины вроде actix-web-cache
требуют отдельного подключения, тогда как в Salvo кэширование — часть основной библиотеки.
С Go/Gin: В Gin используется подход с промежуточным ПО, аналогичный Salvo:
С Spring Boot: Декларативное кэширование Spring Boot преобразуется в явную настройку промежуточного ПО Salvo:
С Express.js: Промежуточное ПО кэширования в Express концептуально похоже на Salvo, но отличается синтаксисом:
При переходе с других фреймворков обратите внимание на ключевые концепции кэширования в Salvo:
CacheIssuer
.CacheStore
.skipper
.По умолчанию Salvo кэширует только GET-запросы, что согласуется с поведением большинства фреймворков.
Пример кода