Php İle Redis Kullanarak Önbellekleme Sistemi Nasıl Yapılır?

Php İle Redis Kullanarak Önbellekleme Sistemi Nasıl Yapılır?
Php İle Redis Kullanarak Önbellekleme Sistemi Nasıl Yapılır?

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.

Bu yazıya tepkinizi paylaşın:
Zeynep Arslan

Mutfak pratikleri ve organizasyonel hayat tüyoları üzerine uzman bir içerik üreticisiyim. Günlük rutinleri optimize eden yöntemleri, anlaşılır ve uygulanabilir rehberler haline getiriyorum.

Yorumlar (18)

18
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Caner Yılmaz
Caner Yılmaz 30 Temmuz 2026

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.

Zeynep Arslan
Zeynep Arslan 01 Ağustos 2026

Çok teşekkürler Caner, takıldığın başka bir yer olursa sormaktan çekinme.

Deniz Kara
Deniz Kara 01 Ağustos 2026

Abi peki bu sistem çok trafik alan sitelerde sunucuyu yorarmı? Ona göre kurulum yapcam da.

Emre Serin
Emre Serin 02 Ağustos 2026

Aksine, veritabanı yükünü aldığı için sunucuyu ciddi rahatlatıyor. Kesinlikle denemelisin.

Selim Baş
Selim Baş 02 Ağustos 2026

Harika bir rehber olmuş. Redis ile session yönetimi hakkında da bir yazı yazabilir misin?

Zeynep Arslan
Zeynep Arslan 03 Ağustos 2026

Harika fikir Selim, bir sonraki yazılarımın planına ekliyorum.

Buse Nur
Buse Nur 03 Ağustos 2026

Benim kodlarda hata veriyo, 'Connection refused' alıyorum. Redis servisi çalışıyo ama çözemedim bi türlü.

Zeynep Arslan
Zeynep Arslan 04 Ağustos 2026

Redis portunu ve host ayarlarını kontrol ettin mi? Bazen localde 127.0.0.1 yerine localhost yazmak sorun çıkarabiliyor.

Fatih Terzi
Fatih Terzi 03 Ağustos 2026

Kardeşim eline koluna sağlık, tam aradığım kaynaktı valla. Çok işime yaradı.

Ayşe Yılmaz
Ayşe Yılmaz 05 Ağustos 2026

Aynen, ben de bugün uyguladım, hız farkı inanılmaz.

Mertcan S.
Mertcan S. 04 Ağustos 2026

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.

Selin Gök
Selin Gök 04 Ağustos 2026

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ı.

Zeynep Arslan
Zeynep Arslan 06 Ağustos 2026

Haklısın Selin, bir sonraki yazıda daha ileri seviye cache stratejilerine ve karmaşık senaryolara odaklanacağım.

Hakan K.
Hakan K. 04 Ağustos 2026

Docker üzerinde çalışan Redis için bi ekleme yapabilirdin aslında, herkes localhostta çalışmıyor sonuçta.

Burak Can
Burak Can 06 Ağustos 2026

Katılıyorum, docker-compose tarafı biraz karışık olabiliyor, iyi olurdu.

Gizem Aydın
Gizem Aydın 06 Ağustos 2026

Yazı süper olmuş, teşekkürler. Redis'in expire sürelerini ayarlarken nelere dikkat etmeliyiz? Sürekli cache temizlemek istemiyorum.

Zeynep Arslan
Zeynep Arslan 07 Ağustos 2026

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ı.

Oğuzhan V.
Oğuzhan V. 06 Ağustos 2026

Ellerinize saglık, çok temiz ve anlasılır bir anlatım olmus. Devamını bekliyoruz.

Yorum Yaz