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 inizend.assertions=-1
fino ad oggi (sino asymfony/cache
7.2.4).
Utilizzare altri componenti Cache
Il componente ThinkCache può essere utilizzato come riferimento in Altre basi di dati