Cache缓存

webman/cache est un composant de cache développé sur la base de symfony/cache, compatible avec les environnements coroutines et non-coroutines, et prenant en charge les pools de connexions.

注意
Ce manuel est pour la version v2 de webman, si vous utilisez la version v1 de webman, veuillez consulter le manuel de la version 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));
    }
}

配置文件位置

Le fichier de configuration se trouve à config/cache.php, s'il n'existe pas, veuillez le créer manuellement.

配置文件内容

<?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 prend en charge 4 types de pilotes : file, redis, array, apcu.

file 文件驱动

Ceci est le pilote par défaut, ne dépendant d'aucun autre composant, supportant le partage des données de cache entre processus, mais ne supportant pas le partage entre serveurs.

array 内存驱动

Stockage en mémoire, offrant les meilleures performances, mais consommant de la mémoire, ne supporte pas le partage des données entre processus ou serveurs, devient invalide après un redémarrage du processus, généralement utilisé pour les projets avec peu de données à mettre en cache.

apcu 内存驱动

Stockage en mémoire, offrant des performances seulement inférieures à celles de array, supportant le partage des données de cache entre processus, mais ne supportant pas le partage entre serveurs, devient invalide après un redémarrage du processus, généralement utilisé pour les projets avec peu de données à mettre en cache.

Nécessite l'installation et l'activation de l'extension APCu ; non recommandé pour les scénarios de lecture/écriture fréquente dans le cache, car cela pourrait entraîner une diminution significative des performances.

redis 驱动

Dépend du composant webman/redis, supportant le partage des données de cache entre processus et entre serveurs.

stores.redis.connection

stores.redis.connection correspond à la clé dans config/redis.php. Lors de l'utilisation de redis, il réutilise la configuration de webman/redis, y compris celle du pool de connexions.

Il est recommandé d’ajouter une configuration indépendante dans config/redis.php, par exemple pour le cache similaire à ceci :

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

Ensuite, réglez stores.redis.connection sur cache, la configuration finale de config/cache.php ressemblera à ceci :

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

切换存储

Vous pouvez changer manuellement le store avec le code suivant, pour utiliser différents pilotes de stockage, par exemple :

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

提示
Le nom de la clé est soumis aux restrictions de PSR6 n'autorisant pas les caractères {}()/\@:, mais pour le moment (jusqu'à symfony/cache 7.2.4), cette vérification peut être temporairement contournée en configurant PHP ini avec zend.assertions=-1.

使用其它Cache组件

Le composant ThinkCache utilise des références à Autres bases de données.