Ö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:
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:
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:
$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.