Cache缓存

webman/cache é um componente de cache desenvolvido com base no symfony/cache, compatível com ambientes de coroutine e não corrotina, e suporta pools de conexão.

注意
当前手册为 webman v2 版本,如果您使用的是webman v1版本,请查看 v1版本手册

Instalação

composer require -W webman/cache

Exemplo

<?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));
    }
}

Localização do arquivo de configuração

O arquivo de configuração está em config/cache.php, se não existir, crie-o manualmente.

Conteúdo do arquivo de configuração

<?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 suporta 4 tipos de driver, file, redis, array, apcu.

driver de arquivo

Este é o driver padrão, não depende de outros componentes, suporta compartilhamento de dados de cache entre processos, não suporta compartilhamento de dados de cache entre múltiplos servidores.

driver de array

Armazenamento em memória, o melhor desempenho, mas consome memória, não suporta compartilhamento de dados entre processos e servidores, e perde os dados após a reinicialização do processo, geralmente usado para projetos com pequeno volume de dados em cache.

driver de apcu

Armazenamento em memória, quase o mesmo desempenho que o array, suporta compartilhamento de dados de cache entre processos, não suporta compartilhamento de dados entre múltiplos servidores, e perde os dados após a reinicialização do processo, geralmente usado para projetos com pequeno volume de dados em cache.

需要安装并启用 APCu 扩展;不建议用于频繁进行缓存写入/删除的场景,会导致明显的性能下降。

driver redis

Depende do componente webman/redis, suporta compartilhamento de dados de cache entre processos e servidores.

stores.redis.connection

stores.redis.connection corresponde à chave no config/redis.php. Ao usar o redis, reutiliza a configuração do webman/redis, incluindo a configuração do pool de conexão.

建议在config/redis.php增加一个独立的配置,例如cache类似如下

<?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-',
    ]
];

Depois, defina stores.redis.connection como cache, a configuração final do config/cache.php ficará assim:

<?php
return [
    'default' => 'redis', // <====
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache')
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'cache' // <====
        ],
        'array' => [
            'driver' => 'array'
        ]
    ]
];

Mudando o armazenamento

Você pode trocar o store manualmente usando o seguinte código, para usar diferentes drivers de armazenamento, como por exemplo:

Cache::store('redis')->set('key', 'value');
Cache::store('array')->set('key', 'value');

提示
O nome das chaves é restrito pelo PSR6 e não pode conter nenhum dos caracteres {}()/\@:. No entanto, até o momento ( symfony/cache 7.2.4 ), isso pode ser temporariamente ignorado configurando zend.assertions=-1 no PHP ini.

Usando outros componentes de Cache

O componente ThinkCache pode ser usado como referência em Outros bancos de dados