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