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