Метод getItems класса Cache
Метод getItems класса Cache возвращает
набор элементов кеша по переданному массиву ключей.
Единственным параметром передаётся массив ключей,
а результатом является итерируемая коллекция объектов
CacheItem, доступных по тем же ключам.
В отличие от последовательных вызовов getItem,
метод getItems позволяет получить сразу несколько
элементов за одну операцию, что особенно эффективно
для адаптеров с сетевым доступом, например Redis или Memcached.
Синтаксис
public function getItems(array $keys = []): iterable
Пример
Давайте сохраним несколько значений в кеш, а затем
прочитаем их одним вызовом getItems:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\Cache\CacheInterface;
class CacheController extends AbstractController
{
#[Route('/cache/items', name: 'cache_items')]
public function items(CacheInterface $cache): Response
{
$cache->get('user_1', fn () => 'abcde');
$cache->get('user_2', fn () => 'article');
$cache->get('user_3', fn () => 'hello');
$res = [];
foreach ($cache->getItems(['user_1', 'user_2', 'user_3']) as $key => $item) {
$res[$key] = $item->get();
}
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"user_1":"abcde","user_2":"article","user_3":"hello"}
Пример
Давайте проверим попадание в кеш через метод isHit
у каждого полученного элемента:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\Cache\CacheInterface;
class CacheController extends AbstractController
{
#[Route('/cache/hits', name: 'cache_hits')]
public function hits(CacheInterface $cache): Response
{
$cache->get('user_1', fn () => 'abcde');
$res = [];
foreach ($cache->getItems(['user_1', 'user_2']) as $key => $item) {
$res[$key] = $item->isHit();
}
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"user_1":true,"user_2":false}