Siirry sisältöön

Välimuisti

Queuety sisältää välimuistikerroksen, joka vähentää tietokantakyselyjä usein käytetyissä toiminnoissa, kuten jonon taukotilan tarkistuksissa, nopeusrajoituslaskureissa, työnkulun tilahauissa ja lukitustoiminnoissa. Välimuisti alustetaan automaattisesti, kun kutsut Queuety::init().

Välimuistirajapinta

Kaikki välimuistin taustajärjestelmät toteuttavat rajapinnan Queuety\Contracts\Cache:

Metodi Palauttaa Kuvaus
get( string $key ) mixed Hakee arvon. Palauttaa null, jos arvoa ei löydy tai se on vanhentunut.
set( string $key, mixed $value, int $ttl = 0 ) void Tallentaa arvon. TTL 0 tarkoittaa, ettei arvo vanhene.
delete( string $key ) void Poistaa arvon.
has( string $key ) bool Tarkistaa, onko avain olemassa ja voimassa.
add( string $key, mixed $value, int $ttl = 0 ) bool Asettaa arvon vain, jos avainta ei vielä ole olemassa (atomisesti). Palauttaa true, jos arvo asetettiin.
flush() void Poistaa kaikki välimuistin kohteet. ApcuCache::flush() kutsuu apcu_clear_cache(), joka tyhjentää palvelimen kaikki APCu-merkinnät, ei vain Queuetyn merkintöjä.

Sisäänrakennetut taustajärjestelmät

MemoryCache (oletus)

Queuety\Cache\MemoryCache on taulukkopohjainen, prosessikohtainen välimuisti. Kohteet tallennetaan PHP-taulukkoon, ja ne katoavat prosessin päättyessä. Tämä on oletustaustajärjestelmä, kun APCu ei ole käytettävissä.

Se ei vaadi laajennuksia, toimii hyvin yhden työntekijän käyttöönotossa ja pitää kunkin työntekijäprosessin erillään muista.

ApcuCache

Queuety\Cache\ApcuCache käyttää APCu-laajennusta jaettua muistia varten kaikissa saman palvelimen PHP-prosesseissa. Kaikkien avainten etuliitteeksi lisätään automaattisesti queuety: törmäysten välttämiseksi muiden sovellusten kanssa.

Tämä taustajärjestelmä vaatii php-apcu-laajennuksen, jakaa välimuistimerkinnät saman palvelimen työntekijöiden kesken ja tekee add()stä aidosti atomisen toiminnolla apcu_add().

Automaattinen tunnistus

Queuety\Cache\CacheFactory valitsee automaattisesti parhaan käytettävissä olevan taustajärjestelmän:

Jos apcu_store() on olemassa ja apcu_enabled() palauttaa arvon true, Queuety käyttää toimintoa ApcuCache. Muussa tapauksessa se käyttää varavaihtoehtona MemoryCache. Tämä tapahtuu Queuety::init()n sisällä, joten oletustoiminta ei vaadi lisämäärityksiä.

Välimuistiin tallennettavat tiedot

Useat alijärjestelmät käyttävät välimuistikerrosta sisäisesti:

Tieto Tarkoitus
Jonon taukotila Välttää tietokantakyselyn jokaisella työntekijän silmukkakierroksella
Nopeusrajoituslaskurit Seuraa suorituskertoja muistissa tietokannan sijaan
Työnkulun tila Vähentää lukuja monivaiheisen työnkulun etenemisen aikana
Lukituksen tila Nopeuttaa yksilöllisten töiden ja mutex-väliohjelmiston lukitustarkistuksia

TTL-määritys

Välimuistin oletusarvoinen TTL on 5 sekuntia. Se koskee jonon taukotilaa ja nopeusrajoituslaskureita; työnkulun tilan ja tilatietojen lukuja välimuistitetaan kiinteäksi 2 sekunniksi, eikä vakio muuta tätä. Korvaa oletusarvo QUEUETY_CACHE_TTL-vakiolla tiedostossa wp-config.php:

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

Lyhyempi TTL tarkoittaa useampia tietokantakyselyjä, mutta ajantasaisempia tietoja. Pidempi TTL vähentää tietokannan kuormitusta, mutta tiedot voivat vanhentua enemmän. Useimmissa käyttöönotossa oletusarvoinen 5 sekuntia on hyvä tasapaino.

Mukautettu välimuistin taustajärjestelmä

Jos haluat käyttää mukautettua välimuistin taustajärjestelmää (Redis, Memcached tai muuta), toteuta rajapinta Contracts\Cache ja kutsu Queuety::set_cache() ennen toimintoa 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 );

Jos set_cache() kutsutaan ennen init(), tehtaan automaattinen tunnistus ohitetaan kokonaan ja mukautettua taustajärjestelmää käytetään.

Välimuistin käyttäminen

Hae aktiivinen välimuisti-instanssi milloin tahansa:

PHP
$cache = Queuety::cache();

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

Tämä palauttaa sillä hetkellä aktiivisen taustajärjestelmän (MemoryCache, ApcuCache tai oman toteutuksesi).