Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce sisteminizde Redis sunucusunun kurulu ve Laravel ile haberleşmeye hazır olması gerekir. 2026 standartlarına göre, PHP 8.3+ ve Laravel 11.x veya üzeri sürümleri kullanmanız önerilir.
- Redis Sunucusu: Yerel geliştirme ortamınızda veya Docker konteynerinde Redis servisinin çalıştığından emin olun.
- PHP Redis Eklentisi: PHP'nin Redis ile konuşabilmesi için
php-redisuzantısının yüklü olması şarttır. - Laravel Yapılandırması:
config/database.phpdosyasında Redis bağlantı ayarlarınızın doğru yapıldığını doğrulayın.
Kurulumu doğrulamak için terminalinizde redis-cli ping komutunu çalıştırın. Eğer "PONG" yanıtını alıyorsanız, sisteminiz hazır demektir.
Laravel Projesinde Redis Bağlantısını Yapılandırma
Laravel, varsayılan olarak predis veya php-redis kütüphanelerini kullanabilir. Performans açısından php-redis eklentisini tercih etmeniz önerilir. İlk adım, .env dosyanızdaki bağlantı bilgilerini güncellemektir.
CACHE_STORE=redis
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Bu ayarlar, Laravel'in önbellek işlemleri için varsayılan olarak Redis'i kullanmasını sağlar. CACHE_STORE anahtarını redis olarak belirlemek, uygulamanızdaki tüm Cache:: fonksiyonlarının doğrudan Redis üzerinde çalışmasını tetikler.
Adım Adım Redis Önbellek Kullanımı
Laravel'de önbellek işlemleri oldukça sezgiseldir. En temel kullanım, sık erişilen verileri geçici olarak Redis'te saklamaktır. Aşağıdaki örnekte, veritabanından çekilen bir kullanıcı listesinin nasıl önbellekleneceğini görebilirsiniz.
use Illuminate\Support\Facades\Cache;
$users = Cache::remember('all_users', 3600, function () {
return User::all();
});
Cache::remember metodu, eğer 'all_users' anahtarı Redis'te mevcutsa veriyi oradan çeker; yoksa closure içindeki sorguyu çalıştırır, sonucu Redis'e kaydeder ve döndürür. 3600 değeri, verinin 1 saat boyunca önbellekte kalacağını belirtir.
Ölçeklenebilir Sistemler İçin Cache Tagging
Büyük ölçekli sistemlerde, tüm önbelleği temizlemek yerine belirli grupları yönetmek istersiniz. Redis, Laravel'in "Cache Tags" özelliğini destekler. Bu, verileri kategorize etmenize ve gerektiğinde sadece o kategoriye ait verileri silmenize olanak tanır.
Cache::tags(['users', 'active'])->put('user_1', $userData, 600);
// Sadece aktif kullanıcılar grubunu temizle
Cache::tags(['active'])->flush();
Bu yöntem, özellikle karmaşık veri setlerinde önbellek yönetimi yaparken uygulamanızın tutarlılığını korumasına yardımcı olur. Ancak, Redis'te etiketleme özelliğinin düzgün çalışması için Redis sürücüsünün yapılandırmada doğru tanımlandığından emin olun.
Veri Tutarlılığı ve Cache Invalidation (Önbellek Geçersizleştirme)
Önbellek kullanmanın en zor kısmı, verinin güncel kalmasını sağlamaktır. Veritabanında bir güncelleme olduğunda, Redis'teki ilgili anahtarı da güncellemeniz veya silmeniz gerekir. Laravel Observer'ları bu iş için biçilmiş kaftandır.
namespace App\Observers;
use App\Models\User;
use Illuminate\Support\Facades\Cache;
class UserObserver {
public function updated(User $user) {
Cache::forget('user_' . $user->id);
}
}
Bu Observer, bir kullanıcı güncellendiği anda Redis'teki eski veriyi siler. Bir sonraki istekte Cache::remember metodu güncel veriyi veritabanından çekip tekrar Redis'e yazacaktır.
Kritik Güvenlik Uyarısı: Redis sunucunuzu asla dış dünyaya (0.0.0.0) açık bırakmayın. Mutlaka bir şifre (AUTH) tanımlayın ve Redis erişimini sadece uygulama sunucunuzun IP adresine kısıtlayın. Hassas verileri önbelleğe alırken şifreleme yöntemlerini gözden geçirin.
Önbellekleme Stratejileri Karşılaştırması
Aşağıdaki tablo, farklı önbellekleme yaklaşımlarının performans ve yönetim açısından karşılaştırmasını sunar:
| Strateji | Avantajı | Dezavantajı |
|---|---|---|
| Cache::remember | Kolay uygulanır, hızlıdır. | Karmaşık verilerde yönetim zorlaşır. |
| Cache Tags | Gruplama ve toplu temizleme sağlar. | Redis bellek kullanımını artırabilir. |
| Event Observers | Veri tutarlılığını otomatik sağlar. | Kod karmaşıklığını bir miktar artırır. |
Sıkça Sorulan Sorular
Redis önbelleğim dolduğunda ne olur?
Redis, varsayılan olarak "allkeys-lru" (Least Recently Used) politikasını kullanır. Yani bellek dolduğunda en az kullanılan verileri silerek yeni veriye yer açar. Bu ayarı redis.conf dosyasından değiştirebilirsiniz.
Cache::forget ile Cache::flush arasındaki fark nedir?
Cache::forget belirli bir anahtarı silerken, Cache::flush tüm önbelleği temizler. Üretim ortamında flush kullanırken çok dikkatli olmalısınız.
Redis'i sadece önbellek için mi kullanmalıyım?
Hayır, Redis aynı zamanda Laravel kuyruk (queue) sistemi ve oturum (session) yönetimi için de mükemmel bir araçtır. Ölçeklenebilir bir mimaride bu üçünü de Redis üzerinde toplamak yönetimi kolaylaştırır.
Redis bağlantı hatalarını nasıl yönetirim?
Laravel, Redis bağlantısı koptuğunda otomatik olarak istisna fırlatır. try-catch blokları kullanarak veya config/database.php içindeki timeout değerlerini optimize ederek bu durumu yönetebilirsiniz.
Önbellek anahtarlarında çakışma olursa ne yapmalı?
Her uygulama için CACHE_PREFIX değerini .env dosyasında benzersiz tanımlayın. Böylece aynı Redis sunucusunu kullanan farklı projeler birbirinin verisini bozmaz.
Sorumluluk Reddi: Bu makaledeki kod örnekleri eğitim amaçlıdır. Üretim ortamına almadan önce yük testleri yapmanız ve Redis sunucunuzun bellek kapasitesini (RAM) projenizin ihtiyaçlarına göre optimize etmeniz önerilir. Yanlış yapılandırılmış önbellek sistemleri veri tutarsızlığına yol açabilir.
İleri Seviye İzleme ve Performans Analizi
Redis önbellek sisteminizin verimliliğini ölçmek, darboğazları tespit etmek için kritiktir. Laravel'in sunduğu Cache olaylarını dinleyerek, önbellek isabet (hit) ve kaçırma (miss) oranlarını takip edebilirsiniz. Bu veriler, hangi verilerin önbelleğe alınmaya değer olduğunu anlamanızı sağlar.
Aşağıdaki örnekte, bir ServiceProvider içerisinde önbellek olaylarını nasıl kaydedebileceğinizi görebilirsiniz:
// app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Event;
use Illuminate\Cache\Events\CacheHit;
use Illuminate\Cache\Events\CacheMissed;
public function boot()
{
Event::listen(CacheHit::class, function ($event) {
\Log::info("Cache Hit: " . $event->key);
});
Event::listen(CacheMissed::class, function ($event) {
\Log::info("Cache Miss: " . $event->key);
});
}
Redis İçin İleri Düzey Optimizasyon ve Deployment İpuçları
Üretim ortamında Redis'in kararlılığını sağlamak için sadece kod seviyesinde değil, sunucu seviyesinde de yapılandırmalar yapmanız gerekir. Özellikle yüksek trafikli uygulamalarda Redis'in "eviction" (tahliye) politikası, sistemin çökmesini engeller.
1. Eviction Politikası Seçimi
Redis'in bellek sınırı dolduğunda nasıl davranacağını redis.conf dosyasından ayarlayabilirsiniz. Laravel önbelleği için genellikle allkeys-lru (Least Recently Used) politikası önerilir. Bu, en az kullanılan verileri silerek yeni veriler için yer açar.
2. Bağlantı Havuzu ve Persistent Connections
PHP'nin doğası gereği her istekte bağlantı açıp kapatmak maliyetlidir. config/database.php içerisinde Redis bağlantınız için persistent seçeneğini aktif ederek bağlantı havuzundan yararlanabilirsiniz:
'redis' => [
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
'persistent' => true, // Bağlantı kalıcılığını sağlar
],
],
3. Önbellek Anahtarlarında İsimlendirme Standartları
Ölçeklenebilir sistemlerde anahtar çakışmalarını önlemek için hiyerarşik bir isimlendirme yapısı kullanın. Örneğin:
user:123:profileproduct:category:electronics:listtenant:5:settings
Bu yapı, Cache::tags(['user:123']) gibi işlemleri çok daha yönetilebilir kılar ve sistem genelinde temizlik yaparken hata payını düşürür.
4. Redis Sentinel ile Yüksek Erişilebilirlik
Tek bir Redis sunucusu (Single Point of Failure) risk taşır. Uygulamanızı ölçeklendirirken Redis Sentinel kullanarak bir "Master-Slave" yapısı kurun. Laravel, config/database.php dosyasındaki options kısmından Sentinel yapılandırmasını destekler, böylece ana sunucu çöktüğünde sistem otomatik olarak yedek sunucuya geçer.
Sonuç
Laravel ile Redis kullanarak ölçeklenebilir bir önbellek sistemi kurmak, uygulamanızın performansını ve kullanıcı memnuniyetini doğrudan artıran bir yatırımdır. Bu rehberde öğrendiğiniz remember yapısı, etiketleme stratejileri ve Observer tabanlı geçersizleştirme yöntemleri, profesyonel bir mimarinin temel taşlarıdır. Bir sonraki adım olarak, Redis üzerinde "Read-Through" ve "Write-Through" önbellekleme desenlerini inceleyerek sisteminizi daha da optimize edebilirsiniz.


Yorumlar (0)
Yorum Yaz