Gereksinimler ve Ön Hazırlık
Başarılı bir kurulum için sunucunuzda PHP'nin Redis eklentisinin yüklü olması şarttır. Ayrıca Redis sunucusunun arka planda çalışıyor olması gerekir. İşletim sisteminize göre kurulum adımları değişiklik gösterebilir ancak genel olarak şu paketlere ihtiyacınız olacaktır:
- PHP 8.2 veya üzeri bir sürüm.
- Redis Sunucusu (redis-server).
- PHP için Redis istemcisi (php-redis extension).
- Composer (Bağımlılık yönetimi için).
Eğer yerel geliştirme ortamınızda Redis yüklü değilse, Linux tabanlı sistemlerde sudo apt install redis-server komutu ile kurulumu yapabilirsiniz. PHP eklentisini doğrulamak için php -m | grep redis komutunu çalıştırarak Redis'in yüklü olup olmadığını kontrol edebilirsiniz.
Redis Sunucusuna PHP İle Bağlanma
Redis ile iletişim kurmak için Redis sınıfını kullanırız. İlk adım, sunucu ile güvenli bir bağlantı kurmaktır. Bağlantı sırasında hata yönetimi yapmak, uygulamanızın Redis çöktüğünde bile çalışmaya devam etmesini sağlar.
Yukarıdaki kod, yerel makinenizdeki varsayılan Redis portuna (6379) bağlanır. Bağlantı başarılı olduğunda bir onay mesajı alırsınız. Hata durumunda ise catch bloğu tetiklenir, bu da üretim ortamında uygulamanızın çökmesini engellemek için kritik bir pratiktir.
Veri Önbellekleme Mantığı: Adım Adım Uygulama
Önbellekleme yaparken temel mantık şudur: Önce Redis'e bak, veri varsa onu kullan; yoksa veritabanından çek, Redis'e kaydet ve sonra kullan. Bu yöntem, pahalı SQL sorgularını her istekte çalıştırmanızı engeller.
İleri Seviye Önbellekleme Stratejileri: TTL ve Veri Geçerliliği
Önbellekleme sistemlerinde en kritik konu, verinin ne kadar süreyle "taze" kalacağıdır. Redis üzerinde TTL (Time To Live) mekanizmasını doğru yönetmek, veritabanı ile önbellek arasındaki senkronizasyonu sağlar. Eğer verileriniz sık değişiyorsa kısa süreli TTL'ler, nadir değişiyorsa uzun süreli TTL'ler belirlemelisiniz.
Aşağıdaki örnek, veriyi Redis'e kaydederken belirli bir saniye cinsinden yaşam süresi atamayı göstermektedir:
$key = "kullanici_profili_123";
$data = ["id" => 123, "name" => "Ahmet", "email" => "ahmet@example.com"];
// Veriyi 3600 saniye (1 saat) boyunca sakla
$redis->setex($key, 3600, json_encode($data));
// Veriyi okuma
$cachedData = $redis->get($key);
if ($cachedData) {
$user = json_decode($cachedData, true);
}
Performans İzleme ve Hata Ayıklama
Redis'in performansını takip etmek, sistemin darboğazlarını anlamak için hayati önem taşır. Redis'in sunduğu INFO komutu, bellek kullanımı ve bağlantı sayısı hakkında detaylı istatistikler verir. Ayrıca, geliştirme aşamasında Redis üzerindeki işlemleri canlı olarak izlemek için MONITOR komutunu kullanabilirsiniz.
Redis Performans İpuçları
- Pipeline Kullanımı: Birden fazla okuma/yazma işlemini tek bir ağ paketinde göndermek için
pipeline() metodunu kullanın.
- Veri Serileştirme: Karmaşık dizileri kaydederken
json_encode yerine daha hızlı olan igbinary veya msgpack kütüphanelerini değerlendirin.
- Bellek Yönetimi: Redis'in
maxmemory-policy ayarını allkeys-lru olarak yapılandırarak, bellek dolduğunda en az kullanılan verilerin otomatik silinmesini sağlayın.
Hata ayıklama sürecinde, Redis bağlantısının kopması durumunda uygulamanızın veritabanına "fallback" (yedek) yapması gerektiğini unutmayın. İşte basit bir hata yakalama yapısı:
try {
$redis->ping();
} catch (RedisException $e) {
// Redis erişilemezse doğrudan veritabanına git
$user = $db->query("SELECT * FROM users WHERE id = 123");
error_log("Redis bağlantısı koptu: " . $e->getMessage());
}
Üretim Ortamı İçin Deployment İpuçları
Uygulamanızı canlıya alırken Redis'i sadece bir önbellek aracı değil, aynı zamanda bir oturum (session) yönetim aracı olarak da kullanabilirsiniz. PHP'nin php.ini dosyasında yapacağınız küçük bir değişiklikle, tüm kullanıcı oturumlarını Redis üzerinde tutarak performans artışı sağlayabilirsiniz:
; php.ini içerisine eklenecek yapılandırma
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
Bu yapılandırma, özellikle yüksek trafikli uygulamalarda dosya sistemi üzerindeki oturum dosyalarının yarattığı I/O yükünü tamamen ortadan kaldıracaktır.


Yorumlar (18)
Zeynep hocam ağzına sağlık, çok açıklayıcı olmuş. Özellikle Redis kurulum kısmında çok takılıyordum, bu rehber sayesinde çözdüm.
Çok teşekkürler Caner, takıldığın başka bir yer olursa sormaktan çekinme.
Abi peki bu sistem çok trafik alan sitelerde sunucuyu yorarmı? Ona göre kurulum yapcam da.
Aksine, veritabanı yükünü aldığı için sunucuyu ciddi rahatlatıyor. Kesinlikle denemelisin.
Harika bir rehber olmuş. Redis ile session yönetimi hakkında da bir yazı yazabilir misin?
Harika fikir Selim, bir sonraki yazılarımın planına ekliyorum.
Benim kodlarda hata veriyo, 'Connection refused' alıyorum. Redis servisi çalışıyo ama çözemedim bi türlü.
Redis portunu ve host ayarlarını kontrol ettin mi? Bazen localde 127.0.0.1 yerine localhost yazmak sorun çıkarabiliyor.
Kardeşim eline koluna sağlık, tam aradığım kaynaktı valla. Çok işime yaradı.
Aynen, ben de bugün uyguladım, hız farkı inanılmaz.
Laravel kullanıyorsanız zaten Redis çok kolay entegre ediliyor ama saf PHP ile yapmak mantığı anlamak adına çok daha iyi. Eline sağlık.
Güzel yazı ama keşke biraz daha fazla örnek kod bloğu olsaydı, şimdilik gayet yeterli olsa da daha karmaşık senaryolar merak uyandırıcı.
Haklısın Selin, bir sonraki yazıda daha ileri seviye cache stratejilerine ve karmaşık senaryolara odaklanacağım.
Docker üzerinde çalışan Redis için bi ekleme yapabilirdin aslında, herkes localhostta çalışmıyor sonuçta.
Katılıyorum, docker-compose tarafı biraz karışık olabiliyor, iyi olurdu.
Yazı süper olmuş, teşekkürler. Redis'in expire sürelerini ayarlarken nelere dikkat etmeliyiz? Sürekli cache temizlemek istemiyorum.
Verinin güncellenme sıklığına göre expire süresi belirlemek en sağlıklısı. Dinamik içeriklerde kısa tutmak mantıklı.
Ellerinize saglık, çok temiz ve anlasılır bir anlatım olmus. Devamını bekliyoruz.
Yorum Yaz