Cachning
Queuety innehåller ett cachelager som minskar databasfrågor i ofta använda kodvägar, till exempel kontroller av om köer är pausade, räknare för hastighetsbegränsningar, uppslagningar av arbetsflödestillstånd och låsåtgärder. Cachen initieras automatiskt när du anropar Queuety::init().
Cachegränssnitt
Alla cache-bakändar implementerar Queuety\Contracts\Cache:
| Metod | Returnerar | Beskrivning |
|---|---|---|
get( string $key ) |
mixed |
Hämtar ett värde. Returnerar null om det inte hittas eller har löpt ut. |
set( string $key, mixed $value, int $ttl = 0 ) |
void |
Lagrar ett värde. TTL på 0 innebär att värdet inte löper ut. |
delete( string $key ) |
void |
Tar bort ett värde. |
has( string $key ) |
bool |
Kontrollerar om en nyckel finns och inte har löpt ut. |
add( string $key, mixed $value, int $ttl = 0 ) |
bool |
Anger ett värde bara om nyckeln inte redan finns (atomiskt). Returnerar true om värdet angavs. |
flush() |
void |
Tar bort alla objekt från cachen. ApcuCache::flush() anropar apcu_clear_cache(), som rensar alla APCu-poster på servern, inte bara Queuetys. |
Inbyggda bakändar
MemoryCache (standard)
Queuety\Cache\MemoryCache är en arraybaserad cache per process. Objekt lagras i en PHP-array och går förlorade när processen avslutas. Detta är standardbakänden när APCu inte är tillgängligt.
Den kräver inga tillägg, fungerar bra för distributioner med en enda arbetare och håller varje arbetsprocess isolerad från de andra.
ApcuCache
Queuety\Cache\ApcuCache använder APCu-tillägget för delat minne mellan alla PHP-processer på samma server. Alla nycklar får automatiskt prefixet queuety: för att undvika kollisioner med andra program.
Den här bakänden kräver tillägget php-apcu, delar cacheposter mellan arbetare på samma server och gör add() verkligt atomiskt via apcu_add().
Automatisk identifiering
Queuety\Cache\CacheFactory väljer automatiskt den bästa tillgängliga bakänden:
Om apcu_store() finns och apcu_enabled() returnerar true använder Queuety ApcuCache. Annars används MemoryCache som reserv. Detta sker inuti Queuety::init(), så standardbeteendet kräver ingen extra konfiguration.
Vad som cachas
Cachelagret används internt av flera delsystem:
| Data | Syfte |
|---|---|
| Pausstatus för kö | Undviker en databasfråga vid varje varv i arbetsprocessens loop |
| Räknare för hastighetsbegränsningar | Följer körningsantal i minnet i stället för databasen |
| Arbetsflödestillstånd | Minskar antalet läsningar när arbetsflöden med flera steg förs vidare |
| Låsstatus | Snabbar upp kontroller av om lås finns för unika jobb och mutex-mellanprogramvara |
Konfiguration av TTL
Standardvärdet för cache-TTL är 5 sekunder. Det gäller pausstatus för köer och räknare för hastighetsbegränsningar. Läsningar av arbetsflödesstatus och -tillstånd cachas i fasta 2 sekunder, vilket konstanten inte ändrar. Åsidosätt standardvärdet med konstanten QUEUETY_CACHE_TTL i din wp-config.php:
define( 'QUEUETY_CACHE_TTL', 10 ); // 10 seconds
En lägre TTL innebär fler databasfrågor men färskare data. En högre TTL minskar databasbelastningen men innebär att data kan vara mer inaktuella. För de flesta distributioner är standardvärdet på 5 sekunder en bra avvägning.
Anpassad cache-bakände
Om du vill använda en anpassad cache-bakände (Redis, Memcached eller något annat) implementerar du gränssnittet Contracts\Cache och anropar Queuety::set_cache() före 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 );
Om set_cache() anropas före init() hoppas fabrikens automatiska identifiering över helt och din anpassade bakände används.
Använda cachen
Hämta den aktiva cacheinstansen när som helst:
$cache = Queuety::cache();
$cache->set( 'my_key', 'my_value', 60 );
$value = $cache->get( 'my_key' );
Detta returnerar den bakände som är aktiv för tillfället (MemoryCache, ApcuCache eller din egen implementering).