İçeriğe geç

Önbelleğe Alma

Queuety; kuyruk duraklatma denetimleri, hız sınırı sayaçları, iş akışı durumu aramaları ve kilit işlemleri gibi sık kullanılan yollardaki veritabanı sorgularını azaltan bir önbellek katmanı içerir. Queuety::init() çağrıldığında önbellek otomatik olarak başlatılır.

Önbellek arayüzü

Tüm önbellek arka uçları Queuety\Contracts\Cache uygular:

Yöntem Döndürdüğü Açıklama
get( string $key ) mixed Bir değeri alır. Bulunamaz veya süresi dolmuşsa null döndürür.
set( string $key, mixed $value, int $ttl = 0 ) void Bir değeri saklar. TTL değerinin 0 olması, sürenin dolmayacağı anlamına gelir.
delete( string $key ) void Bir değeri kaldırır.
has( string $key ) bool Bir anahtarın mevcut ve süresi dolmamış olup olmadığını denetler.
add( string $key, mixed $value, int $ttl = 0 ) bool Bir değeri yalnızca anahtar henüz yoksa ayarlar (atomik). Değer ayarlandıysa true döndürür.
flush() void Önbellekteki tüm öğeleri kaldırır. ApcuCache::flush(), yalnızca Queuety öğelerini değil, sunucudaki tüm APCu girdilerini temizleyen apcu_clear_cache() çağrısını yapar.

Yerleşik arka uçlar

MemoryCache (varsayılan)

Queuety\Cache\MemoryCache, dizi tabanlı ve süreç başına çalışan bir önbellektir. Öğeler bir PHP dizisinde saklanır ve süreç sona erdiğinde kaybolur. APCu kullanılamıyorsa varsayılan arka uç budur.

Hiçbir uzantı gerektirmez, tek çalışanlı dağıtımlarda iyi çalışır ve her çalışan sürecini diğerlerinden yalıtır.

ApcuCache

Queuety\Cache\ApcuCache, aynı sunucudaki tüm PHP süreçleri arasında paylaşılan bellek için APCu uzantısını kullanır. Diğer uygulamalarla çakışmayı önlemek için tüm anahtarlara otomatik olarak queuety: öneki eklenir.

Bu arka uç php-apcu uzantısını gerektirir, aynı sunucudaki çalışanlar arasında önbellek girdilerini paylaşır ve apcu_add() aracılığıyla add() işlemini gerçekten atomik hâle getirir.

Otomatik algılama

Queuety\Cache\CacheFactory kullanılabilir en iyi arka ucu otomatik olarak seçer:

apcu_store() varsa ve apcu_enabled(), true döndürüyorsa Queuety, ApcuCache kullanır. Aksi durumda MemoryCache seçeneğine geri döner. Bu işlem Queuety::init() içinde gerçekleştiğinden varsayılan davranış için ek yapılandırma gerekmez.

Neler önbelleğe alınır

Önbellek katmanı çeşitli alt sistemler tarafından dahili olarak kullanılır:

Veri Amaç
Kuyruk duraklatma durumu Her çalışan döngüsü yinelemesinde veritabanı sorgusu yapılmasını önler
Hız sınırı sayaçları Yürütme sayılarını veritabanı yerine bellekte izler
İş akışı durumu Çok adımlı iş akışının ilerlemesi sırasında okumaları azaltır
Kilit durumu Benzersiz işler ve mutex ara yazılımı için kilit varlığı denetimlerini hızlandırır

TTL yapılandırması

Varsayılan önbellek TTL değeri 5 saniyedir. Kuyruk duraklatma durumu ve hız sınırı sayaçları için geçerlidir; iş akışı durumu ve durum okumaları ise sabit 2 saniye boyunca önbelleğe alınır ve bu süre sabitle değiştirilemez. Varsayılanı wp-config.php dosyanızdaki QUEUETY_CACHE_TTL sabitiyle geçersiz kılın:

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

Daha düşük bir TTL, daha sık veritabanı sorgusu yapılması ancak verilerin daha güncel olması demektir. Daha yüksek bir TTL veritabanı yükünü azaltır, ancak verilerin güncelliğini yitirmesine yol açar. Çoğu dağıtım için varsayılan 5 saniye iyi bir dengedir.

Özel önbellek arka ucu

Özel bir önbellek arka ucu (Redis, Memcached veya başka bir şey) kullanmak için Contracts\Cache arayüzünü uygulayın ve Queuety::init() öncesinde Queuety::set_cache() çağırın:

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

init() öncesinde set_cache() çağrılırsa fabrika otomatik algılaması tamamen atlanır ve özel arka ucunuz kullanılır.

Önbelleğe erişme

Etkin önbellek örneğini istediğiniz zaman alın:

PHP
$cache = Queuety::cache();

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

Bu, o anda etkin olan arka ucu (MemoryCache, ApcuCache veya özel uygulamanız) döndürür.