Cache缓存

webman/cache ist eine Cache-Komponente, die auf symfony/cache basiert. Sie ist mit kooperativen und nicht-kooperativen Umgebungen kompatibel und unterstützt Verbindungspools.

注意
当前手册为 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));
    }
}

配置文件位置

Die Konfigurationsdatei befindet sich in config/cache.php. Wenn sie nicht vorhanden ist, erstellen Sie sie bitte manuell.

配置文件内容

<?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 unterstützt 4 Arten von Treibern: file, redis, array, apcu.

file 文件驱动

Dies ist der Standardtreiber, der keine anderen Komponenten benötigt und den interprozessualen Austausch von Cache-Daten unterstützt, jedoch keinen Austausch von Cache-Daten über mehrere Server hinweg.

array 内存驱动

Speicherung im Arbeitsspeicher, mit der besten Leistung, verbraucht jedoch Arbeitsspeicher. Unterstützt keinen interprozessualen oder interserver Austausch von Daten und ist nach einem Neustart des Prozesses ungültig. Wird in der Regel für Projekte mit kleinen Cache-Datenmengen verwendet.

apcu 内存驱动

Speicherung im Arbeitsspeicher, die Leistung ist nur geringer als die von array. Unterstützt den interprozessualen Austausch von Cache-Daten, jedoch keinen interserver Austausch von Daten. Nach einem Neustart des Prozesses ist es ungültig und wird normalerweise für Projekte mit kleinen Cache-Datenmengen verwendet.

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

redis 驱动

Abhängig von der webman/redis Komponente, unterstützt den interprozessualen und interserver Austausch von Cache-Daten.

stores.redis.connection

stores.redis.connection entspricht dem entsprechenden Schlüssel in config/redis.php. Bei der Verwendung von redis werden die Konfigurationen von webman/redis, einschließlich der Verbindungspool-Konfigurationen, wiederverwendet.

建议在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-',
    ]
];

Dann setzen Sie stores.redis.connection auf cache, die endgültige Konfiguration von config/cache.php sieht dann wie folgt aus:

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

切换存储

Sie können den Speicher manuell mit folgendem Code wechseln, um unterschiedliche Speicher-Treiber zu verwenden, zum Beispiel:

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

提示
Der Schlüsselname unterliegt den Einschränkungen von PSR6 und darf keines der Zeichen {}()/\@: enthalten. Diese Überprüfung kann jedoch derzeit (mit symfony/cache 7.2.4) vorübergehend durch die PHP ini-Konfiguration zend.assertions=-1 umgangen werden.

使用其它Cache组件

Für die Verwendung des ThinkCache Komponente beachten Sie bitte die Anleitung für 其他数据库