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 смотрите Другие базы данных