Pāriet uz saturu

Kešatmiņa

Queuety ietver kešatmiņas slāni, kas samazina datu bāzes vaicājumu skaitu bieži izmantotās vietās, piemēram, pārbaudot rindas pauzi, ātruma ierobežojumu skaitītājus, darbplūsmas stāvokļa meklējumus un slēdzeņu darbības. Kešatmiņa tiek inicializēta automātiski, kad izsaucat Queuety::init().

Kešatmiņas saskarne

Visas kešatmiņas aizmugursistēmas implementē Queuety\Contracts\Cache:

Metode Atgriež Apraksts
get( string $key ) mixed Iegūst vērtību. Atgriež null, ja tā nav atrasta vai ir beidzies tās derīguma termiņš.
set( string $key, mixed $value, int $ttl = 0 ) void Saglabā vērtību. TTL 0 nozīmē, ka derīguma termiņš nebeidzas.
delete( string $key ) void Noņem vērtību.
has( string $key ) bool Pārbauda, vai atslēga pastāv un tās derīguma termiņš nav beidzies.
add( string $key, mixed $value, int $ttl = 0 ) bool Iestata vērtību tikai tad, ja atslēga vēl nepastāv (atomiski). Atgriež true, ja vērtība ir iestatīta.
flush() void Noņem visus kešatmiņas vienumus. ApcuCache::flush() izsauc apcu_clear_cache(), kas serverī iztīra visus APCu ierakstus, nevis tikai Queuety.

Iebūvētās aizmugursistēmas

MemoryCache (noklusējuma)

Queuety\Cache\MemoryCache ir uz masīviem balstīta kešatmiņa katram procesam. Vienumi tiek glabāti PHP masīvā un tiek zaudēti, kad process tiek apturēts. Šī ir noklusējuma aizmugursistēma, ja APCu nav pieejams.

Tai nav nepieciešami paplašinājumi, tā labi darbojas izvietojumos ar vienu darba procesu un nodrošina katra darba procesa izolāciju no pārējiem.

ApcuCache

Queuety\Cache\ApcuCache izmanto APCu paplašinājumu, lai nodrošinātu koplietojamo atmiņu visiem PHP procesiem vienā serverī. Visām atslēgām automātiski tiek pievienots prefikss queuety:, lai novērstu sadursmes ar citām lietotnēm.

Šai aizmugursistēmai nepieciešams paplašinājums php-apcu, tā koplieto kešatmiņas ierakstus starp darba procesiem vienā serverī un nodrošina patiesi atomisku add() darbību, izmantojot apcu_add().

Automātiskā noteikšana

Queuety\Cache\CacheFactory automātiski izvēlas labāko pieejamo aizmugursistēmu:

Ja apcu_store() pastāv un apcu_enabled() atgriež true, Queuety izmanto ApcuCache. Pretējā gadījumā tas izmanto MemoryCache. Tas notiek iekšēji Queuety::init(), tāpēc noklusējuma darbībai nav nepieciešama papildu konfigurācija.

Kas tiek kešots

Kešatmiņas slāni iekšēji izmanto vairākas apakšsistēmas:

Dati Mērķis
Rindas pauzes stāvoklis Novērš datu bāzes vaicājumu katrā darba procesa cilpas iterācijā
Ātruma ierobežojumu skaitītāji Uzskaita izpildes reizes atmiņā, nevis datu bāzē
Darbplūsmas stāvoklis Samazina nolasījumu skaitu, virzot vairāku soļu darbplūsmu uz priekšu
Slēdzenes stāvoklis Paātrina unikālu uzdevumu un savstarpējās izslēgšanas starpprogrammatūras slēdzeņu esamības pārbaudes

TTL konfigurācija

Kešatmiņas noklusējuma TTL ir 5 sekundes. Tas attiecas uz rindas pauzes stāvokli un ātruma ierobežojumu skaitītājiem; darbplūsmas statusa un stāvokļa nolasījumi tiek kešoti fiksētas 2 sekundes, ko šī konstante nemaina. Mainiet noklusējuma vērtību ar konstanti QUEUETY_CACHE_TTL savā wp-config.php:

PHP
define( 'QUEUETY_CACHE_TTL', 10 ); // 10 seconds

Īsāks TTL nozīmē biežākus datu bāzes vaicājumus, bet svaigākus datus. Garāks TTL samazina datu bāzes slodzi, bet palielina novecojušu datu iespējamību. Lielākajai daļai izvietojumu noklusējuma 5 sekundes ir labs līdzsvars.

Pielāgota kešatmiņas aizmugursistēma

Lai izmantotu pielāgotu kešatmiņas aizmugursistēmu (Redis, Memcached vai jebkuru citu), implementējiet saskarni Contracts\Cache un izsauciet Queuety::set_cache() pirms Queuety::init():

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 );

Ja set_cache() tiek izsaukts pirms init(), rūpnīcas automātiskā noteikšana tiek pilnībā izlaista un tiek izmantota jūsu pielāgotā aizmugursistēma.

Piekļuve kešatmiņai

Jebkurā laikā iegūstiet aktīvo kešatmiņas instanci:

PHP
$cache = Queuety::cache();

$cache->set( 'my_key', 'my_value', 60 );
$value = $cache->get( 'my_key' );

Tiek atgriezta pašlaik aktīvā aizmugursistēma (MemoryCache, ApcuCache vai jūsu pielāgotā implementācija).