Pereiti prie turinio

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:

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():

PHP
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ų:

PHP
$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).