Caching
Queuety indeholder et cachelag, der reducerer databaseforespørgsler på ofte benyttede kodeveje, f.eks. kontroller af køpauser, tællere for hastighedsbegrænsning, opslag af workflowtilstand og låsehandlinger. Cachen initialiseres automatisk, når du kalder Queuety::init().
Cachegrænseflade
Alle cachebackends implementerer Queuety\Contracts\Cache:
| Metode | Returnerer | Beskrivelse |
|---|---|---|
get( string $key ) |
mixed |
Hent en værdi. Returnerer null, hvis værdien ikke findes eller er udløbet. |
set( string $key, mixed $value, int $ttl = 0 ) |
void |
Gem en værdi. TTL på 0 betyder, at værdien ikke udløber. |
delete( string $key ) |
void |
Fjern en værdi. |
has( string $key ) |
bool |
Kontrollér, om en nøgle findes og ikke er udløbet. |
add( string $key, mixed $value, int $ttl = 0 ) |
bool |
Angiv kun en værdi, hvis nøglen ikke allerede findes (atomisk). Returnerer true, hvis værdien blev angivet. |
flush() |
void |
Fjern alle elementer fra cachen. ApcuCache::flush() kalder apcu_clear_cache(), som rydder alle APCu-poster på serveren, ikke kun Queuety's. |
Indbyggede backends
MemoryCache (standard)
Queuety\Cache\MemoryCache er en arraybaseret cache pr. proces. Elementer gemmes i et PHP array og går tabt, når processen afsluttes. Dette er standardbackend, når APCu ikke er tilgængelig.
Den kræver ingen udvidelser, fungerer godt ved installationer med én worker og holder hver workerproces isoleret fra de andre.
ApcuCache
Queuety\Cache\ApcuCache bruger APCu-udvidelsen til delt hukommelse på tværs af alle PHP-processer på samme server. Alle nøgler får automatisk præfikset queuety: for at undgå sammenfald med andre applikationer.
Denne backend kræver udvidelsen php-apcu, deler cacheposter mellem workers på samme server og gør add() ægte atomisk via apcu_add().
Automatisk registrering
Queuety\Cache\CacheFactory vælger automatisk den bedst tilgængelige backend:
Hvis apcu_store() findes, og apcu_enabled() returnerer true, bruger Queuety ApcuCache. Ellers falder den tilbage til MemoryCache. Dette sker i Queuety::init(), så standardadfærden kræver ingen ekstra konfiguration.
Hvad der caches
Cachelaget bruges internt af flere undersystemer:
| Data | Formål |
|---|---|
| Køens pausetilstand | Undgår en databaseforespørgsel ved hver gentagelse af workerløkken |
| Tællere for hastighedsbegrænsning | Registrerer antal kørsler i hukommelsen i stedet for i databasen |
| Workflowtilstand | Reducerer antallet af læsninger under fremdrift i workflows med flere trin |
| Låsetilstand | Fremskynder kontrol af, om låse findes, for unikke jobs og mutex-middleware |
TTL-konfiguration
Standard-TTL for cachen er 5 sekunder. Den gælder køens pausetilstand og tællere for hastighedsbegrænsning; status- og tilstandslæsninger for workflows caches i faste 2 sekunder, som konstanten ikke ændrer. Tilsidesæt standarden med konstanten QUEUETY_CACHE_TTL i din wp-config.php:
define( 'QUEUETY_CACHE_TTL', 10 ); // 10 seconds
En lavere TTL betyder hyppigere databaseforespørgsler, men friskere data. En højere TTL reducerer belastningen på databasen, men giver mere forældede data. For de fleste installationer er standarden på 5 sekunder en god balance.
Tilpasset cachebackend
Hvis du vil bruge en tilpasset cachebackend (Redis, Memcached eller en anden), skal du implementere grænsefladen Contracts\Cache og kalde Queuety::set_cache() før Queuety::init():
use Queuety\Contracts\Cache;
use Queuety\Queuety;
class RedisCache implements Cache {
public function get( string $key ): mixed { /* ... */ }
public function set( string $key, mixed $value, int $ttl = 0 ): void { /* ... */ }
public function delete( string $key ): void { /* ... */ }
public function has( string $key ): bool { /* ... */ }
public function add( string $key, mixed $value, int $ttl = 0 ): bool { /* ... */ }
public function flush(): void { /* ... */ }
}
// Set the cache before init() so all subsystems use it.
Queuety::set_cache( new RedisCache() );
Queuety::init( $connection );
Hvis set_cache() kaldes før init(), springes fabrikkens automatiske registrering helt over, og din tilpassede backend bruges.
Adgang til cachen
Hent den aktive cacheinstans når som helst:
$cache = Queuety::cache();
$cache->set( 'my_key', 'my_value', 60 );
$value = $cache->get( 'my_key' );
Dette returnerer den backend, der aktuelt er aktiv (MemoryCache, ApcuCache eller din tilpassede implementering).