English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- Giriş
- Kurulum
- Kullanım
- Yapılandırma
- İleri Düzey Kullanım
- Optimizasyon
- Yaygın Modeller
- Sınırlamalar
- Destek Kılavuzları
- Lisans - MIT Lisansı
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
- Otomatik Geçersiz Kılma: Önbellekteki anahtarlar değiştiğinde Redis uygulamanızı bilgilendirir, önbellek tutarlılığını sağlamak için
- Sıfır Konfigürasyon: Makul varsayılanlarla kutudan çıktığı gibi çalışır
- Octane Entegrasyonu: Otomatik bağlantı ısınması, isteğe dayalı geçersiz kılma işlemleri ve nazik kapanış
- Çift Sürücü Desteği: Tüm Octane sunucuları için APCu, Swoole/OpenSwoole ortamları için Swoole Tablosu
- Seçici Önbellekleme: Hangi anahtar öneklerini yerel olarak önbelleğe almak istediğinizi yapılandırın
- Yarış Durumu Koruması: Bekleyen istek takibi, eş zamanlı geçersiz kılmalar sırasında süresi dolmuş verilerin önbelleğe alınmasını engeller
Örnek
// Önbellek sürücüsü olarak recall'ı yapılandır// config/cache.php'stores' => [ 'recall' => [ 'driver' => 'recall', ],], // Laravel önbelleği gibi kullanuse 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 bilgilendirirCache::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
- PHP >= 8.4
- Laravel 11.x veya 12.x
- Laravel Octane
- Redis 6.0+ (istemci tarafı önbellekleme desteği için)
- ext-apcu VEYA ext-swoole (yerel önbellek için en az birinin olması gerekiyor)
Kullanım
Temel Ayar
config/cache.phpdosyanıza Recall önbellek deposunu ekleyin:
'stores' => [ // ... diğer depolar 'recall' => [ 'driver' => 'recall', ],],
- 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 silCache::store('recall')->forget('key');
Nasıl Çalışır
- İlk Okuma: Değer Redis'ten alınır ve yerel APCu/Swoole Tablosu önbelleğinde saklanır
- Sonraki Okumalar: Değer doğrudan yerel bellekten sunulur (alt milisaniye)
- Herhangi bir Yerde Yazma: Herhangi bir istemci Redis'te anahtarı değiştirdiğinde, Redis bir geçersiz kılma mesajı gönderir
- Otomatik Geçersiz Kılma: Recall mesajı alır ve anahtarı yerel önbellekten kaldırır
- 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:
- İşçi Başlangıcı: Redis geçersiz kılma bağlantısını oluşturur (ısıtma başlangıcı)
- İstek Alındığında: Bekleyen geçersiz kılma mesajlarını işler
- İşçi Durdurulduğunda: Bağlantıları nazikçe kapatır
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:
- ext-apcu yüklü ve etkin
- CLI kullanımı için php.ini'de
apc.enable_cli=1
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ı:
table_size: 2'nin kuvveti olmalıdır (örneğin, 65536, 131072). Maksimum giriş sayısını belirler.value_size: Serileştirilmiş değerler için maksimum bayt. Daha büyük değerler sessizce kesilir.
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 etif ($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:
- Yüksek devirli anahtarlar: Bazı anahtarlar o kadar sık değişir ki yerel önbellek getirisi düşük olur
- Büyük değerler: Sadece daha küçük, sık okunan anahtarları önbelleğe alarak bellek basıncını azaltın
- Hassas veriler: Güvenlik veya uyumluluk nedenleriyle belirli verileri yalnızca Redis'te tutun
// 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ınapc.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ınCache::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:
- İstemci tarafı önbelleklemeden yararlanan önbellek verileri için tek bir Redis örneği kullanın
- Sıklıkla okunan, istikrarlı verileri bağımsız bir örnekte tutarken diğer veriler için Redis Kümeyi kullanın
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.