Podėliavimas
Queuety turi podėlio talpyklą, kuri mažina duomenų bazės užklausų skaičių dažnai naudojamuose keliuose, pavyzdžiui, tikrinant eilės pristabdymą, greičio ribojimo skaitiklius, darbo eigos būseną ir užraktų veikimą. Talpykla inicijuojama automatiškai iškvietus Queuety::init().
Podėlio sąsaja
Visos podėlio sąsajos realizacijos įgyvendina Queuety\Contracts\Cache:
| Metodas | Grąžinama reikšmė | Aprašymas |
|---|---|---|
get( string $key ) |
mixed |
Gauti reikšmę. Grąžina null, jei jos nėra arba ji nebegalioja. |
set( string $key, mixed $value, int $ttl = 0 ) |
void |
Išsaugoti reikšmę. TTL 0 reiškia, kad ji negalioja pasibaigus terminui. |
delete( string $key ) |
void |
Pašalinti reikšmę. |
has( string $key ) |
bool |
Patikrinti, ar raktas egzistuoja ir vis dar galioja. |
add( string $key, mixed $value, int $ttl = 0 ) |
bool |
Nustatyti reikšmę tik jei raktas dar neegzistuoja (atomiškai). Grąžina true, jei reikšmė nustatyta. |
flush() |
void |
Pašalinti visus talpyklos elementus. ApcuCache::flush() iškviečia apcu_clear_cache(), kuris pašalina visus serverio APCu įrašus, ne tik Queuety. |
Integruotos posistemės
MemoryCache (numatytoji)
Queuety\Cache\MemoryCache yra masyvu pagrįsta kiekvieno proceso talpykla. Elementai laikomi PHP masyve ir prarandami procesui pasibaigus. Tai numatytoji posistemė, kai APCu nepasiekiama.
Jai nereikia plėtinių, ji puikiai veikia diegiant su vienu darbuotoju, o kiekvieno darbuotojo procesas lieka atskirtas nuo kitų.
ApcuCache
Queuety\Cache\ApcuCache naudoja APCu plėtinį bendrajai atminčiai visuose to paties serverio PHP procesuose. Visiems raktams automatiškai pridedamas priešdėlis queuety:, kad jie nesikirstų su kitų programų raktais.
Šiai posistemei reikia plėtinio php-apcu, ji bendrina talpyklos įrašus tarp to paties serverio darbuotojų ir užtikrina, kad add() būtų tikrai atomiškas naudojant apcu_add().
Automatinis aptikimas
Queuety\Cache\CacheFactory automatiškai parenka geriausią prieinamą posistemę:
Jei apcu_store() egzistuoja, o apcu_enabled() grąžina true, Queuety naudoja ApcuCache. Kitu atveju pasirenkama atsarginė MemoryCache. Tai vyksta per Queuety::init(), todėl numatytajai elgsenai papildomos konfigūracijos nereikia.
Kas podėliuojama
Talpyklą viduje naudoja kelios posistemės:
| Duomenys | Paskirtis |
|---|---|
| Eilės pristabdymo būsena | Išvengiama duomenų bazės užklausos kiekvieno darbuotojo ciklo metu |
| Greičio ribojimo skaitikliai | Vykdymų skaičius sekamas atmintyje, o ne duomenų bazėje |
| Darbo eigos būsena | Mažiau skaitoma duomenų perkeliant kelių žingsnių darbo eigą į priekį |
| Užrakto būsena | Paspartinamas užraktų egzistavimo tikrinimas unikalioms užduotims ir abipusio blokavimo tarpinei programinei įrangai |
TTL konfigūracija
Numatytasis talpyklos TTL yra 5 sekundės. Jis taikomas eilės pristabdymo būsenai ir greičio ribojimo skaitikliams; darbo eigos būsenos ir būsenos nuskaitymai talpykloje laikomi fiksuotas 2 sekundes, šios trukmės konstanta nekeičia. Numatytąją reikšmę galite pakeisti QUEUETY_CACHE_TTL konstanta savo wp-config.php:
define( 'QUEUETY_CACHE_TTL', 10 ); // 10 seconds
Trumpesnis TTL reiškia dažnesnes duomenų bazės užklausas, bet naujesnius duomenis. Ilgesnis TTL sumažina duomenų bazės apkrovą, bet padidina pasenusių duomenų tikimybę. Daugumai diegimų numatytoji 5 sekundžių trukmė yra tinkamas kompromisas.
Pasirinktinė podėlio posistemė
Norėdami naudoti pasirinktinę podėlio posistemę (Redis, Memcached ar kitą), įgyvendinkite sąsają Contracts\Cache ir prieš Queuety::init() iškvieskite Queuety::set_cache():
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 );
Jei set_cache() iškviečiamas prieš init(), gamyklos automatinis aptikimas visiškai praleidžiamas ir naudojama jūsų pasirinktinė posistemė.
Prieiga prie podėlio
Bet kuriuo metu gaukite aktyvios talpyklos egzempliorių:
$cache = Queuety::cache();
$cache->set( 'my_key', 'my_value', 60 );
$value = $cache->get( 'my_key' );
Grąžinama šiuo metu aktyvi posistemė (MemoryCache, ApcuCache arba jūsų pasirinktinė realizacija).