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/components/cache.html
Возможность отказаться от закешированных данных (брать ли из кеша)
Можно используйте подход с указанием того брать ли данные из кеша.
- Log in to post comments
- 2233 reads