Cache缓存
webman/cache является компонентом кэширования, разработанным на основе symfony/cache, совместимым как с корутинными, так и с некорутинными окружениями, поддерживает пул соединений.
注意
Текущий мануал относится к версии webman v2. Если вы используете версию webman v1, пожалуйста, посмотрите мануал для v1 версии
安装
composer require -W webman/cache
示例
<?php
namespace app\controller;
use support\Request;
use support\Cache;
class UserController
{
public function db(Request $request)
{
$key = 'test_key';
Cache::set($key, rand());
return response(Cache::get($key));
}
}
配置文件位置
Конфигурационный файл находится в config/cache.php
. Если его нет, создайте его вручную.
配置文件内容
<?php
return [
'default' => 'file',
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache')
],
'redis' => [
'driver' => 'redis',
'connection' => 'default'
],
'array' => [
'driver' => 'array'
],
'apcu' => [
'driver' => 'apcu'
]
]
];
stores.driver
поддерживает 4 типа драйверов: file, redis, array, apcu.
file 文件驱动
Это драйвер по умолчанию, не требует других компонентов, поддерживает совместное использование кэшированных данных между процессами, не поддерживает совместное использование кэшированных данных между серверами.
array 内存驱动
Хранение в памяти, наилучшее по производительности, но занимает память, не поддерживает совместное использование данных между процессами и серверами, теряет данные после перезапуска процесса, обычно используется для проектов с небольшим объемом кэшируемых данных.
apcu 内存驱动
Хранение в памяти, производительность чуть хуже, чем у array, поддерживает совместное использование кэшированных данных между процессами, не поддерживает совместное использование кэшированных данных между серверами, теряет данные после перезапуска процесса, обычно используется для проектов с небольшим объемом кэшируемых данных.
Необходимо установить и активировать APCu 扩展; не рекомендуется использовать в сценариях с частыми записями/удалениями кэшированных данных, это приведет к заметному снижению производительности.
redis 驱动
Зависит от компонента webman/redis, поддерживает совместное использование кэшированных данных между процессами и серверами.
stores.redis.connection
stores.redis.connection
соответствует соответствующему ключу в config/redis.php
. При использовании redis будут повторно использоваться настройки webman/redis
, включая настройки пула соединений.
Рекомендуется добавить в config/redis.php
отдельную конфигурацию, например, для кэша, как показано ниже
<?php
return [
'default' => [
'password' => 'abc123',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
'cache' => [ // <==== 新增
'password' => 'abc123',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 1,
'prefix' => 'webman_cache-',
]
];
Затем установите stores.redis.connection
на cache
, итоговая конфигурация config/cache.php
будет выглядеть следующим образом
<?php
return [
'default' => 'redis', // <====
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache')
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache' // <====
],
'array' => [
'driver' => 'array'
]
]
];
切换存储
Вы можете вручную переключать хранилище, используя следующий код, чтобы использовать разные драйверы хранения, например
Cache::store('redis')->set('key', 'value');
Cache::store('array')->set('key', 'value');
提示
Имена ключей подвержены ограничениям PSR6 и не могут содержать любой из символов{}()/\@:
. Но это ограничение на данный момент (с версииsymfony/cache
7.2.4) возможно временно обойти, установивzend.assertions=-1
в конфигурации PHP.
使用其它Cache组件
Для использования компонента ThinkCache смотрите Другие базы данных