Predpomnjenje
Queuety vključuje predpomnilniško plast, ki zmanjšuje število poizvedb v zbirko podatkov na najbolj obremenjenih poteh, kot so preverjanja zaustavitve čakalne vrste, števci omejitev hitrosti, iskanja stanja poteka dela in operacije zaklepanja. Predpomnilnik se inicializira samodejno, ko pokličete Queuety::init().
Vmesnik predpomnilnika
Vsa zaledja predpomnilnika implementirajo Queuety\Contracts\Cache:
| Metoda | Vrne | Opis |
|---|---|---|
get( string $key ) |
mixed |
Pridobi vrednost. Če je ni mogoče najti ali je potekla, vrne null. |
set( string $key, mixed $value, int $ttl = 0 ) |
void |
Shrani vrednost. TTL 0 pomeni, da ne poteče. |
delete( string $key ) |
void |
Odstrani vrednost. |
has( string $key ) |
bool |
Preveri, ali ključ obstaja in še ni potekel. |
add( string $key, mixed $value, int $ttl = 0 ) |
bool |
Nastavi vrednost samo, če ključ še ne obstaja (atomsko). Če je bila vrednost nastavljena, vrne true. |
flush() |
void |
Iz predpomnilnika odstrani vse elemente. ApcuCache::flush() pokliče apcu_clear_cache(), ki izbriše vsak vnos APCu v strežniku, ne le vnosov aplikacije Queuety. |
Vgrajena zaledja
MemoryCache (privzeto)
Queuety\Cache\MemoryCache je predpomnilnik na podlagi polja za posamezen proces. Elementi so shranjeni v polju PHP in se izgubijo, ko se proces konča. To je privzeto zaledje, kadar APCu ni na voljo.
Ne zahteva razširitev, dobro deluje pri uvedbah z enim delavcem in ohranja proces vsakega delavca ločen od drugih.
ApcuCache
Queuety\Cache\ApcuCache uporablja razširitev APCu za skupni pomnilnik med vsemi procesi PHP v istem strežniku. Pred vsemi ključi se samodejno doda predpona queuety:, da se preprečijo trki z drugimi aplikacijami.
To zaledje zahteva razširitev php-apcu, omogoča skupno rabo vnosov predpomnilnika med delavci v istem strežniku in zagotavlja, da je add() zares atomski prek apcu_add().
Samodejno zaznavanje
Queuety\Cache\CacheFactory samodejno izbere najboljše razpoložljivo zaledje:
Če apcu_store() obstaja in apcu_enabled() vrne true, Queuety uporabi ApcuCache. V nasprotnem primeru uporabi MemoryCache. To se zgodi znotraj Queuety::init(), zato privzeto vedenje ne zahteva dodatnih nastavitev.
Kaj se predpomni
Predpomnilniško plast interno uporablja več podsistemov:
| Podatek | Namen |
|---|---|
| Stanje zaustavitve čakalne vrste | Preprečuje poizvedbo v zbirko podatkov pri vsakem koraku zanke delavca |
| Števci omejitev hitrosti | Število izvedb spremlja v pomnilniku namesto v zbirki podatkov |
| Stanje poteka dela | Zmanjšuje število branj med napredovanjem večstopenjskega poteka dela |
| Stanje zaklepanja | Pospešuje preverjanje obstoja zaklepanja za enolična opravila in vmesno programsko opremo za medsebojno izključevanje |
Nastavitev TTL
Privzeti TTL predpomnilnika je 5 sekund. Velja za stanje zaustavitve čakalne vrste in števce omejitev hitrosti; branja stanja in stanja poteka dela se predpomnijo za stalni 2 sekundi, na kateri ta konstanta ne vpliva. Privzeto vrednost spremenite s konstanto QUEUETY_CACHE_TTL v svoji datoteki wp-config.php:
define( 'QUEUETY_CACHE_TTL', 10 ); // 10 seconds
Krajši TTL pomeni pogostejše poizvedbe v zbirko podatkov, a sveže podatke. Daljši TTL zmanjša obremenitev zbirke podatkov, vendar so podatki lahko bolj zastareli. Za večino uvedb je privzeta vrednost 5 sekund dobro ravnovesje.
Zaledje predpomnilnika po meri
Če želite uporabiti zaledje predpomnilnika po meri (Redis, Memcached ali katero koli drugo), implementirajte vmesnik Contracts\Cache in pokličite Queuety::set_cache() pred 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 );
Če pokličete set_cache() pred init(), se samodejno zaznavanje v tovarni v celoti preskoči in uporabi se vaše zaledje po meri.
Dostop do predpomnilnika
Kadar koli pridobite aktivni primerek predpomnilnika:
$cache = Queuety::cache();
$cache->set( 'my_key', 'my_value', 60 );
$value = $cache->get( 'my_key' );
To vrne trenutno aktivno zaledje (MemoryCache, ApcuCache ali vašo implementacijo po meri).