Cache缓存

webman/cache è un componente di caching sviluppato su base symfony/cache, compatibile con ambienti sia coroutine che non coroutine, e supporta il pooling delle connessioni.

Attenzione
Questo manuale è per la versione webman v2. Se stai utilizzando la versione webman v1, consulta il manuale della versione v1

Installazione

composer require -W webman/cache

Esempio

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

Posizione del file di configurazione

Il file di configurazione si trova in config/cache.php, se non esiste, crealo manualmente.

Contenuto del file di configurazione

<?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 supporta 4 tipi di driver: file, redis, array, apcu.

driver file

Questo è il driver predefinito, non dipende da altri componenti, supporta la condivisione dei dati cache tra processi, ma non supporta la condivisione dei dati cache tra più server.

driver array

Memoria per lo storage, prestazioni ottimali, ma occupa memoria, non supporta la condivisione dei dati tra processi e server, scade dopo un riavvio del processo, generalmente utilizzato per progetti con una piccola quantità di dati cache.

driver apcu

Memoria per lo storage, prestazioni seconde solo a quelle di array, supporta la condivisione dei dati cache tra processi, ma non supporta la condivisione dei dati cache tra più server, scade dopo un riavvio del processo, generalmente utilizzato per progetti con una piccola quantità di dati cache.

È necessario installare e abilitare l'estensione APCu; non è raccomandato per scenari in cui si scrivono/eliminano frequentemente i dati di cache, poiché ciò può causare un evidente calo delle prestazioni.

driver redis

Dipende dal componente webman/redis, supporta la condivisione dei dati cache tra processi e server.

stores.redis.connection

stores.redis.connection corrisponde alla chiave nel config/redis.php. Quando si utilizza redis, riutilizzerà la configurazione di webman/redis, inclusa la configurazione del pool di connessioni.

Si consiglia di aggiungere una configurazione indipendente in config/redis.php, per esempio cache simile a quanto segue

<?php
return [
    'default' => [
        'password' => 'abc123',
        'host' => '127.0.0.1',
        'port' => 6379,
        'database' => 0,
    ],
    'cache' => [ // <==== Nuovo
        'password' => 'abc123',
        'host' => '127.0.0.1',
        'port' => 6379,
        'database' => 1,
        'prefix' => 'webman_cache-',
    ]
];

Poi imposta stores.redis.connection su cache, la configurazione finale in config/cache.php sarà simile a quanto segue

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

Cambiare lo storage

Puoi cambiare manualmente lo store con il seguente codice, per utilizzare diversi driver di storage, ad esempio

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

Suggerimento
I nomi delle chiavi sono soggetti alle restrizioni di PSR6 e non possono contenere alcun carattere di {} /() @:. Tuttavia, questa restrizione può essere temporaneamente aggirata tramite la configurazione di PHP ini zend.assertions=-1 fino ad oggi (sino a symfony/cache 7.2.4).

Utilizzare altri componenti Cache

Il componente ThinkCache può essere utilizzato come riferimento in Altre basi di dati