symfony Кеширование - как сделать
Primary tabs
Простой пример кеширования запроса к API с помощью кеш-контракта (см метод getClients()):
use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Contracts\Cache\ItemInterface; /** * Запросы к VK */ class VkApiClientService { private $accountId; private $apiVersion; private $accessToken; /** * @var VK\Client\VKApiClient Клиент из стандартного VK SDK */ private $client; /** * @var Symfony\Component\Cache\Adapter\FilesystemAdapter стандартный компонент кеширования */ private $cache; /** * @var int время жизни кеша */ private $defaultCacheLifetime = 3600; public function __construct(string $accountId, string $apiVersion, string $accessToken) { $this->accountId = $accountId; $this->apiVersion = $apiVersion; $this->accessToken = $accessToken; $this->client = new VKApiClient($this->apiVersion); $this->cache = new FilesystemAdapter(); } /** * Данные по клиентам * * @return array */ public function getClients() { $responce = $this->cache->get(__FUNCTION__, function (ItemInterface $item) { // var_dump('call!'); $item->expiresAfter($this->defaultCacheLifetime); $responce = $this->client->ads()->getClients($this->accessToken, ['account_id' => $this->accountId]); return $responce; }); // var_dump('from cache'); // $this->cache->delete(__FUNCTION__); return $responce; }
Подробнее о кешировании: https://symfony.com/doc/current/componen...
Возможность отказаться от закешированных данных (брать ли из кеша)
Можно используйте подход с указанием того брать ли данные из кеша.
- Log in to post comments
- 1729 reads