Сегодня я покажу вам компонент 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-приложениях. Он также поддерживает различные адаптеры кэширования, которые вместе дают вам гибкость в выборе типа сервера, который вы хотите использовать.
Не стесняйтесь выражать свои мысли и вопросы, используя форму ниже.