Сегодня я покажу вам компонент Symfony Cache, простой способ добавить кеширование в ваши PHP-приложения. Это помогает повысить общую производительность вашего приложения за счет сокращения времени загрузки страницы.
Компонент Symfony Cache
Компонент Symfony Cache позволяет настроить кэширование в ваших приложениях PHP. Сам компонент очень прост в установке и настройке и позволяет быстро приступить к работе. Кроме того, он предоставляет множество адаптеров на выбор, как показано в следующем списке:
- адаптер базы данных
- адаптер файловой системы
- Memcached адаптер
- Redis адаптер
- Адаптер APCu
- и более
Когда дело доходит до кэширования с использованием компонента Symfony Cache, есть несколько терминов, с которыми вы должны ознакомиться.
Начнем с того, что элемент кэша относится к содержимому, которое хранится. Каждый элемент хранится в виде пары ключ-значение. Элементы кэша управляются пулом кэша , который логически группирует их. Фактически, вам нужно использовать пул кеша для манипулирования значениями кеша. Наконец, это адаптер кеша, который выполняет всю тяжелую работу по хранению элементов в бэкэнде кэша .
В этой статье мы рассмотрим, как вы можете раскрыть всю мощь компонента Symfony Cache. Как обычно, мы начнем с установки и настройки, а затем продолжим исследовать несколько реальных примеров во второй половине статьи.
Установка и настройка
В этом разделе мы собираемся установить компонент Cache. Я предполагаю, что вы уже установили Composer в своей системе — он понадобится вам для установки компонента Cache, доступного в Packagist.
После того, как вы установили Composer, продолжайте и установите компонент Cache, используя следующую команду.
|
1
|
$composer require symfony/cache
|
Это должно было создать файл composer.json, который должен выглядеть следующим образом:
|
1
2
3
4
5
|
{
«require»: {
«symfony/cache»: «^4.1»
}
}
|
Вот и все для установки, но как вы должны добавить его в свое приложение? Это просто вопрос включения файла autoload.php, созданного Composer, в ваше приложение, как показано в следующем фрагменте.
|
1
2
3
4
5
|
<?php
require_once ‘./vendor/autoload.php’;
// application code
?>
|
Пример из реального мира
В этом разделе мы рассмотрим пример, который демонстрирует, как вы можете использовать компонент Cache в своих приложениях для кэширования контента.
Для начала давайте создадим файл index.php со следующим содержимым.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
<?php
require_once ‘./vendor/autoload.php’;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
// init cache pool of file system adapter
$cachePool = new FilesystemAdapter(», 0, «cache»);
// 1. store string values
$demoString = $cachePool->getItem(‘demo_string’);
if (!$demoString->isHit())
{
$demoString->set(‘Hello World!’);
$cachePool->save($demoString);
}
if ($cachePool->hasItem(‘demo_string’))
{
$demoString = $cachePool->getItem(‘demo_string’);
echo $demoString->get();
echo «\n»;
}
// delete all items
$cachePool->clear();
if (!$cachePool->hasItem(‘demo_string’))
{
echo «The cache entry demo_string was deleted successfully!\n»;
}
// 2. store array values
$demoOne = $cachePool->getItem(‘demo_array’);
if (!$demoOne->isHit())
{
$demoOne->set(array(«one», «two», «three»));
$cachePool->save($demoOne);
}
if ($cachePool->hasItem(‘demo_array’))
{
$demoOne = $cachePool->getItem(‘demo_array’);
var_dump($demoOne->get());
echo «\n»;
}
// delete specific item
$cachePool->deleteItem(‘demo_array’);
if (!$cachePool->hasItem(‘demo_array’))
{
echo «The cache entry demo_array was deleted successfully!\n»;
}
// 3. set expiry on items
$foo = $cachePool->getItem(‘foo’);
if (!$foo->isHit())
{
$foo->set(‘bar’);
$foo->expiresAfter(30);
$cachePool->save($foo);
}
if ($cachePool->hasItem(‘foo’))
{
$foo = $cachePool->getItem(‘foo’);
echo $foo->get();
echo «\n»;
}
sleep(60);
if ($cachePool->hasItem(‘foo’))
{
$foo = $cachePool->getItem(‘foo’);
echo $foo->get();
echo «\n»;
}
else
{
echo «Cache item was expired!\n»;
}
|
Давайте пройдемся по основным частям файла index.php, чтобы понять их назначение.
Создайте пул кеша
Как мы обсуждали ранее, кэшированные элементы хранятся в пуле кэша. Кроме того, каждый пул кеша поддерживается определенным бэкэндом кеша и адаптером. Например, если вы хотите хранить элементы в кэше файловой системы, вам нужно инициализировать пул кэша адаптера файловой системы.
|
1
|
$cachePool = new FilesystemAdapter(», 0, «cache»);
|
Вы можете предоставить три необязательных аргумента объекту FilesystemAdapter :
- пространство имен, в котором вы хотите создать записи кэша
- время жизни в секундах для элементов кэша
- каталог, в котором будет храниться кеш.
Как хранить строковые значения
Поскольку мы уже создали пул кеша, мы можем использовать его для хранения элементов кеша.
Во-первых, мы используем метод getItem для извлечения элемента кэша с ключом demo_string . Далее мы используем метод isHit чтобы проверить, присутствует ли isHit значение в элементе кеша $demoString .
|
1
2
3
4
5
6
|
$demoString = $cachePool->getItem(‘demo_string’);
if (!$demoString->isHit())
{
$demoString->set(‘Hello World!’);
$cachePool->save($demoString);
}
|
Поскольку мы впервые demo_string элемент кэша isHit метод isHit должен возвращать значение false . Далее мы используем метод $demoString объекта $demoString для установки значения кэша. Наконец, мы сохраняем $demoString кэша $demoString в $cachePool кэша $cachePool используя метод save .
Теперь, когда мы сохранили элемент в кэше, давайте посмотрим, как извлечь его из кэша.
|
1
2
3
4
5
6
|
if ($cachePool->hasItem(‘demo_string’))
{
$demoString = $cachePool->getItem(‘demo_string’);
echo $demoString->get();
echo «\n»;
}
|
Здесь мы используем метод hasItem для проверки наличия элемента кэша в пуле кэша перед его извлечением.
Далее, давайте посмотрим, как удалить все элементы кеша из пула кеша:
|
1
|
$cachePool->clear();
|
Как сохранить значения массива
В предыдущем разделе мы обсуждали, как хранить базовые значения в пуле кеша. Хранение значений массива во многом аналогично, как вы можете видеть в следующем примере.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
$demoOne = $cachePool->getItem(‘demo_array’);
if (!$demoOne->isHit())
{
$demoOne->set(array(«one», «two», «three»));
$cachePool->save($demoOne);
}
if ($cachePool->hasItem(‘demo_array’))
{
$demoOne = $cachePool->getItem(‘demo_array’);
var_dump($demoOne->get());
echo «\n»;
}
|
Как видите, мы можем просто установить элемент кэша со значением массива, точно так же, как мы сделали для строки.
Далее, давайте посмотрим, как удалить определенный элемент кэша из пула кэша.
|
1
|
$cachePool->deleteItem(‘demo_array’);
|
Здесь мы используем метод deleteItem для удаления элемента demo_array из пула кеша.
Как установить дату истечения срока действия для кэшированных элементов
До сих пор мы кэшировали элементы в пул без даты истечения срока их действия. Однако обычно вы не хотите постоянно хранить элементы в кэше. Например, вы можете периодически обновлять элементы кэша, поэтому вам необходим механизм, который удаляет устаревшие элементы кэша.
В этом разделе мы обсудим, как хранить элементы в кэше вместе с датой истечения срока действия.
|
1
2
3
4
5
6
7
|
$foo = $cachePool->getItem(‘foo’);
if (!$foo->isHit())
{
$foo->set(‘bar’);
$foo->expiresAfter(30);
$cachePool->save($foo);
}
|
Как видно из приведенного выше фрагмента, вы можете использовать метод expiresAfter чтобы установить дату истечения срока действия для кэшируемого элемента. В первом аргументе метода expiresAfter вы можете передать количество секунд, на которое вы хотели бы кэшировать элемент.
В нашем примере мы используем метод sleep чтобы проверить, доступен ли кэшированный элемент в пуле кэша.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
if ($cachePool->hasItem(‘foo’))
{
$foo = $cachePool->getItem(‘foo’);
echo $foo->get();
echo «\n»;
}
sleep(60);
if ($cachePool->hasItem(‘foo’))
{
$foo = $cachePool->getItem(‘foo’);
echo $foo->get();
echo «\n»;
}
else
{
echo «Cache item was expired!\n»;
}
|
Идите и проверьте это, чтобы увидеть, как это работает!
Вывод
Сегодня мы кратко рассмотрели компонент Symfony Cache, который позволяет вам настроить кэширование в ваших PHP-приложениях. Он также поддерживает различные адаптеры кэширования, которые вместе дают вам гибкость в выборе типа сервера, который вы хотите использовать.
Не стесняйтесь выражать свои мысли и вопросы, используя форму ниже.