Defective Code Logo

Total Downloads Latest Stable Version Latest Stable Version

English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文

Giriş

Recall, Laravel için yüksek performanslı bir Redis istemci tarafı önbellekleme paketidir. Redis 6'nın istemci tarafı önbellekleme özelliğini otomatik geçersiz kılma ile kullanarak Redis'e yapılan yuvarlak gezintileri ve gecikmeleri dramatik bir şekilde azaltır. Özellikle Laravel Octane ortamları için oluşturulmuştur, APCu veya Swoole Tablosunu yerel bir önbellek katmanı olarak kullanır ve bu katman geçersiz kılma mesajları aracılığıyla Redis ile senkronizedir.

Redis'ten bir değeri aldığınızda, Recall bu değeri yerel olarak saklar. Bu değer Redis'te (herhangi bir istemciden) değiştiğinde, Redis otomatik olarak Recall'u yerel kopyayı geçersiz kılmak için bilgilendirir. Bu, size bellek içinde önbelleklemenin hızını, Redis'in tutarlılık garantileriyle birlikte sunar.

Temel Özellikler

Örnek

// Önbellek sürücüsü olarak recall'ı yapılandır
// config/cache.php
'stores' => [
'recall' => [
'driver' => 'recall',
],
],
 
// Laravel önbelleği gibi kullan
use Illuminate\Support\Facades\Cache;
 
// İlk çağrı: Redis'ten alır, yerel olarak saklar
$user = Cache::store('recall')->get('user:1');
 
// Ardışık çağrılar: yerel APCu/Swoole Tablosundan (mikrosaniyeler)
$user = Cache::store('recall')->get('user:1');
 
// user:1 her hangi bir yerde güncellendiğinde, Redis Recall'u geçersiz kılmak için bilgilendirir
Cache::store('recall')->put('user:1', $newUserData, 3600);
// Yerel önbellek otomatik olarak tüm işçilerde geçersiz kılınır

Kurulum

Paketi Composer aracılığıyla kurun:

composer require defectivecode/laravel-recall

Gereksinimler

Kullanım

Temel Ayar

  1. config/cache.php dosyanıza Recall önbellek deposunu ekleyin:
'stores' => [
// ... diğer depolar
 
'recall' => [
'driver' => 'recall',
],
],
  1. Uygulamanızda önbellek deposunu kullanın:
use Illuminate\Support\Facades\Cache;
 
// Bir değeri sakla (Redis'e yazma)
Cache::store('recall')->put('key', 'value', 3600);
 
// Bir değeri al (ilk çağrı Redis'i yoklar, ardışık çağrılar yerel önbelleği kullanır)
$value = Cache::store('recall')->get('key');
 
// Bir değeri sil
Cache::store('recall')->forget('key');

Nasıl Çalışır

  1. İlk Okuma: Değer Redis'ten alınır ve yerel APCu/Swoole Tablosu önbelleğinde saklanır
  2. Sonraki Okumalar: Değer doğrudan yerel bellekten sunulur (alt milisaniye)
  3. Herhangi bir Yerde Yazma: Herhangi bir istemci Redis'te anahtarı değiştirdiğinde, Redis bir geçersiz kılma mesajı gönderir
  4. Otomatik Geçersiz Kılma: Recall mesajı alır ve anahtarı yerel önbellekten kaldırır
  5. Sonraki Okuma: Yeni değer Redis'ten alınır ve tekrar yerel olarak önbelleğe alınır

Bu model, işçilerin talepler arasında kalıcı olduğu Laravel Octane ortamlarında özellikle güçlüdür, yerel önbelleğin birikmesine ve bellekten birçok isteği hizmet etmesine olanak tanır.

Octane Entegrasyonu

Recall, mevcut olduğunda Laravel Octane ile otomatik olarak entegre olur:

Ek bir yapılandırma gerekli değildir. Entegrasyon, Octane yüklendiğinde otomatik olarak gerçekleşir.

Yapılandırma

Yapılandırma dosyasını yayınlayın:

php artisan vendor:publish --tag=recall-config

Bu, aşağıdaki seçenekler ile config/recall.php oluşturur:

Etkinleştir/Durdur

'enabled' => env('RECALL_ENABLED', true),

Devre dışı bırakıldığında, Recall doğrudan Redis'e geçer ve yerel önbellek katmanını kullanmaz. Hata ayıklama veya kademeli dağıtım için yararlıdır.

Redis Deposu

'redis_store' => env('RECALL_REDIS_STORE', 'redis'),

Redis işlemleri için kullanılacak Laravel önbellek deposu. Bu, config/cache.php dosyanızda yapılandırılmış bir Redis deposunu referans almalıdır.

Önbellek Önekleri

'cache_prefixes' => [],

Yalnızca bu öneklerle eşleşen anahtarları yerel olarak önbelleğe alır. Tüm anahtarları önbelleğe almak için boş bırakın.

// Yalnızca kullanıcı ve ayar anahtarlarını yerel olarak önbelleğe al
'cache_prefixes' => ['users:', 'settings:', 'config:'],

Bu, yüksek hacimli anahtarlarınız varsa ve sık sık değişiyorlarsa ve yerel önbelleğe alınmaması gerekiyorsa yararlıdır.

Yerel Önbellek Yapılandırması

'local_cache' => [
// Sürücü: "apcu" veya "swoole"
'driver' => env('RECALL_LOCAL_DRIVER', 'apcu'),
 
// Yerel önbellek anahtarları için önek
'key_prefix' => env('RECALL_LOCAL_PREFIX', 'recall:'),
 
// Varsayılan TTL saniye cinsinden (geçersiz kılma kaçırılırsa güvenlik ağı)
'default_ttl' => (int) env('RECALL_LOCAL_TTL', 3600),
 
// Swoole Tablosu boyutu (2'nin kuvveti, yalnızca swoole sürücüsü için)
'table_size' => (int) env('RECALL_SWOOLE_TABLE_SIZE', 65536),
 
// Swoole Tablosunda maksimum değer boyutu (yalnızca swoole sürücüsü için)
'value_size' => (int) env('RECALL_SWOOLE_VALUE_SIZE', 8192),
],

APCu Sürücüsü (Varsayılan)

APCu sürücüsü, tüm PHP ortamları ve Octane sunucuları (Swoole, RoadRunner, FrankenPHP) ile çalışır. Önbelleğe alınmış değerleri, tüm PHP süreçlerine erişilebilir ortak bellekte saklar.

Gereksinimler:

Swoole Tablosu Sürücüsü

Swoole Tablosu sürücüsü, Swoole'un paylaşılmış bellek tablolarını kullanır ve aynı işçi içindeki korutinler arasında tutarlı erişim sağlar. Swoole/OpenSwoole ortamları için en iyisidir.

Yapılandırma ipuçları:

Octane Dinleyicileri

'listeners' => [
// İşçi başlangıcında bağlantıyı ısıt (ilk istek gecikmesini azaltır)
'warm' => env('RECALL_LISTEN_WARM', true),
 
// Tık olaylarında geçersiz kılmaları işler (daha duyarlı, az miktarda ek yük)
'tick' => env('RECALL_LISTEN_TICK', false),
],

Isıtılan Bağlantılar

Etkinleştirildiğinde, Recall, Octane işçisi başladığında Redis geçersiz kılma aboneliğini oluşturur. Bu, ilk istekteki bağlantı gecikmesini ortadan kaldırır.

Tık İşleme

Etkinleştirildiğinde, Recall, Octane tık olaylarında istek olaylarına ek olarak geçersiz kılma mesajlarını işler. Bu, küçük bir ek yük karşılığında önbellek geçersiz kılmalarında daha duyarlı olmaya olanak tanır.

İleri Düzey Kullanım

Manuel Geçersiz Kılma İşleme

Geçersiz kılmaları manuel olarak işlemeniz gerektiğinde (örneğin, uzun süreli bir süreçte):

use DefectiveCode\Recall\RecallManager;
 
$manager = app(RecallManager::class);
$manager->processInvalidations();

Yerel Önbelleği Temizleme

Sadece yerel önbelleği temizlemek için Redis'i etkilemeden:

use DefectiveCode\Recall\RecallManager;
 
$manager = app(RecallManager::class);
$manager->flushLocalCache();

Bağlantı Yönetimi

use DefectiveCode\Recall\RecallManager;
 
$manager = app(RecallManager::class);
 
// Geçersiz kılma aboneliğinin bağlı olup olmadığını kontrol et
if ($manager->isConnected()) {
// ...
}
 
// Manuel olarak bağlantıyı kes
$manager->disconnect();

Optimizasyon

İşçi İstek Sınırları

Laravel Octane, bellek sızıntılarını önlemek için yapılandırılabilir bir istek sayısından sonra işçileri döngüye alır. Bir işçi döngüye girdiğinde, yerel önbelleği temizlenir. Bu sınırın artırılması, Recall'un yerel önbelleğinin daha uzun süre kalmasını sağlar ve önbellek hit oranlarını arttırır.

config/octane.php dosyanızda:

// Döngüye girmeden önceki varsayılan istek sayısı 500'dür
'max_requests' => 10000,

Daha yüksek değerler, daha iyi önbellek kullanımı anlamına gelir ancak uygulamanızın bellek sızıntısı olmadığından emin olmanızı gerektirir. Bu değeri ayarlarken işçi bellek kullanımınızı izleyin.

Öneklerle Seçici Önbellekleme

Hangi anahtarların yerel olarak önbelleğe alındığını kontrol etmek için cache_prefixes kullanın. Bu, değerli olabilir:

// config/recall.php
'cache_prefixes' => [
'users:', // Kullanıcı verilerini yerel olarak önbelleğe al
'settings:', // Uygulama ayarlarını önbelleğe al
'products:', // Ürün kataloğunu önbelleğe al
],

Bu öneklerle eşleşmeyen anahtarlar, yine de çalışır, ancak yerel önbelleği atlayarak doğrudan Redis'e geçer.

Bellek Düşünceleri

APCu Bellek

APCu, tüm PHP süreçleri arasında bellek paylaşır. Bellek limitini php.ini dosyasına yapılandırın:

; Varsayılan 32MB'dır, daha büyük önbellek ihtiyaçları için artırın
apc.shm_size = 128M

APCu kullanımını apcu_cache_info() ile izleyin:

$info = apcu_cache_info();
$memory = $info['mem_size']; // Bayt cinsinden mevcut bellek kullanımı

Swoole Tablo Boyutlandırması

Swoole Tabloları, oluşturma sırasında sabit bir kapasiteye sahiptir. Beklenen önbellek boyutunuz için plan yapın:

'local_cache' => [
// Maksimum girişler (2'nin kuvveti olmalıdır)
'table_size' => 65536, // 64K giriş
 
// Serileştirilmiş değer boyutu için maksimum bayt
'value_size' => 8192, // Değer başına 8KB
],

Bellek kullanımı: table_size × (value_size + overhead). 65536 girişe ve 8KB değerlerine sahip bir tablo yaklaşık olarak 512MB kullanır.

Yaygın Modeller

Uygulama Yapılandırması

// Özellik bayrakları ve ayarları için önbellek
$features = Cache::store('recall')->remember('config:features', 3600, function () {
return Feature::all()->pluck('enabled', 'name')->toArray();
});
 
// Ayarlar değiştiğinde, tüm işçiler otomatik olarak güncellemeleri alır

Sık Erişim Sağlanan Referans Verileri

// Ürün kategorilerini önbelleğe al
$categories = Cache::store('recall')->remember('categories:all', 3600, function () {
return Category::with('children')->whereNull('parent_id')->get();
});
 
// Döviz kurları önbelleğe al
$rates = Cache::store('recall')->remember('rates:exchange', 300, function () {
return ExchangeRate::all()->pluck('rate', 'currency')->toArray();
});

Önbellek Etiketleri Alternatifi

Recall, önbellek etiketlerini desteklemez, ancak benzer işlevselliği öneklerle elde edebilirsiniz:

// Etiketler yerine, tutarlı önekler kullanın
Cache::store('recall')->put("blog:posts:{$id}", $post, 3600);
Cache::store('recall')->put("blog:comments:{$postId}", $comments, 3600);
 
// Tüm blog ile ilgili önbelleği önekle temizleyin (manuel uygulama gerektirir)
// Ya da veri değiştiğinde otomatik geçersiz kılma üzerine güvenin

Sınırlamalar

Redis Küme Modu

Recall, Redis Küme modunu desteklemez. CLIENT TRACKING komutunun REDIRECT seçeneği, hem veri bağlantısının hem de geçersiz kılma abonesi bağlantısının aynı Redis düğümünde olmasını gerektirir. Bir kümede, anahtarlar hash slotlarına göre birden fazla düğüm arasında dağıtıldığından, farklı düğümlerde depolanan anahtarlar için geçersiz kılma almak mümkün değildir.

Küme halinde Redis dağıtımları için şunları değerlendiriniz:

Destek Kılavuzları

Açık kaynak paketimizi seçtiğiniz için teşekkürler! Lütfen bu destek kılavuzlarına bir göz atmak için biraz zaman ayırın. Bu kılavuzlar, projemizden en iyi şekilde yararlanmanıza yardımcı olacaktır.

Topluluk Tarafından Destek

Açık kaynak projemiz, harika topluluğumuz tarafından destekleniyor. Sorularınız varsa veya yardıma ihtiyacınız varsa, StackOverflow ve diğer çevrimiçi kaynaklar en iyi seçeneklerinizdir.

Hatalar ve Özellik Önceliklendirmesi

Açık kaynak projesini yönetmenin gerçeği, bildirilmiş olan her hata veya özellik talebini hemen ele alamayacağımızdır. Sorunları aşağıdaki sırayla önceliklendiriyoruz:

1. Ücretli Ürünlerimizi Etkileyen Hatalar

Ücretli ürünlerimizi etkileyen hatalar her zaman en yüksek önceliğimiz olacaktır. Bazı durumlarda, yalnızca bizim doğrudan etkilendiğimiz hataları ele alabiliriz.

2. Topluluk Çekme Talepleri

Bir hata tespit ettiyseniz ve bir çözümünüz varsa, lütfen bir çekme talebi gönderin. Ürünlerimizi etkileyen sorunlardan sonra, bu topluluk odaklı düzeltmelere en yüksek önceliği veriyoruz. İncelendikten ve onaylandıktan sonra, çözümünüzü birleştirecek ve katkınızı takdir edeceğiz.

3. Finansal Destek

Belirtilen kategorilerin dışındaki sorunlar için, çözümünü finanse etmeyi tercih edebilirsiniz. Her açık sorun, maddi katkıda bulunabileceğiniz bir sipariş formuna bağlıdır. Bu sorunları sağlanan finansman miktarına göre önceliklendiriyoruz.

Topluluk Katkıları

Açık kaynak, topluluğu aktif olduğunda gelişir. Hataları düzeltmiyor olsanız bile, kod iyileştirmeleri, belgeleri güncellemeler, öğreticiler aracılığıyla veya topluluk kanallarında başkalarına yardımcı olarak katkıda bulunmayı düşünün. Herkesi, bir topluluk olarak, açık kaynak çalışmalarını desteklemeye teşvik ediyoruz.

Tekrar belirtmek gerekirse, DefectiveCode, hataları nasıl etkilediklerine göre önceliklendirecektir; bu, ücretli ürünlerimize etkisi, topluluk çekme talepleri ve sorunlar için alınan finansal desteği içermektedir.

Lisans - MIT Lisansı

Telif Hakkı © Defective Code, LLC. Tüm hakları saklıdır

Bu yazılım ve ilgili belge dosyalarının (bundan böyle "Yazılım" olarak anılacaktır) bir kopyasını edinen herhangi bir kişiye, Yazılım'da kısıtlama olmaksızın işlem yapma izni verilmiştir; bu izin, Yazılım'ı kullanma, kopyalama, değiştirme, birleştirme, yayımlama, dağıtma, alt lisans verme ve/veya Yazılım'ın kopyalarını satma haklarını da içermektedir ve Yazılım'ın sağlandığı kişilerin bunu yapmasına izin verilmektedir; ancak, aşağıdaki koşullara tabi olacaktır:

Yukarıdaki telif hakkı bildirimi ve bu izin bildirimi, Yazılım'ın tüm kopyalarında veya önemli kısımlarında yer almalıdır.

YAZILIM "OLDUĞU GİBİ" SAĞLANMAKTADIR; HERHANGİ BİR TÜRDE, AÇIK YA DA ZIMNİ, SATILABİLİRLİK, BELİRLİ BİR AMACA UYGUNLUK VEYA HUKUKİ İHLAL GARANTİSİ DE DAHİL OLMAK ÜZERE HİÇBİR GARANTİ VERMEZ. YAZARLAR VEYA TELİF HAKKI SAHİPLERİ, YAZILIM’DAN veya YAZILIM'IN KULLANIMI veya DİĞER İŞLEMLERİNDEN KAYNAKLANAN HERHANGİ BİR TALEP, ZARAR VEYA DİĞER YÜKÜMDÜRLÜKLERDEN SORUMLU TUTULAMAZ; İSTER SÖZLEŞME TASARISI, SORUMLULUK, YA DA BAŞKA BİR ŞEKİLDE OLSUN.