Redis Nedir? PHP Projelerinde Redis Cache Kullanarak Performans Nasıl Artırılır?

1 Yanıt 20 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Web projelerinde trafik arttıkça veritabanı sorgularının sayısı da artar. Özellikle PHP ve MySQL ile geliştirilen forumlar, e-ticaret siteleri ve içerik platformlarında aynı verilerin tekrar tekrar sorgulanması sunucu kaynaklarının gereksiz yere tüketilmesine neden olabilir.
Bu noktada Redis gibi bellek tabanlı veri depolama sistemleri devreye girer.

Redis Nedir?

Redis, verileri ağırlıklı olarak RAM üzerinde tutan, çok hızlı veri erişimi sağlayan bir veri yapısı sunucusudur. Önbellekleme (cache), oturum yönetimi, sayaçlar, kuyruklar ve geçici verilerin saklanması gibi birçok farklı amaçla kullanılabilir.
Örneğin bir forumda ana sayfa her açıldığında popüler konuları veritabanından yeniden çekmek yerine bu veriler belirli bir süre Redis üzerinde saklanabilir.

Redis Kullanmanın Avantajları

  • Daha hızlı yanıt süreleri: Sık kullanılan verilere hızlı erişim sağlar.
  • Daha az veritabanı yükü: Tekrarlanan sorguların sayısını azaltabilir.
  • Esnek veri yapıları: String, hash, list, set ve diğer veri türlerini destekler.
  • TTL desteği: Önbellekteki verilerin belirli bir süre sonra otomatik olarak silinmesini sağlar.
  • Ölçeklenebilirlik: Doğru mimariyle yoğun trafik altında performans iyileştirmelerine katkıda bulunabilir.

PHP ile Basit Redis Cache Örneği

Aşağıdaki örnekte bir verinin önce Redis üzerinde bulunup bulunmadığı kontrol edilir. Veri önbellekte yoksa MySQL'den alınır ve Redis'e kaydedilir.
KOD
12345678910111213141516171819202122232425<?php

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$cacheKey = 'popular_topics';
$cachedData = $redis->get($cacheKey);

if ($cachedData !== false) {
    $topics = json_decode($cachedData, true);
} else {
    // Örnek: Veriler normalde MySQL sorgusuyla alınır.
    $topics = [
        ['id' => 1, 'title' => 'PHP Performans İpuçları'],
        ['id' => 2, 'title' => 'Redis ile Cache Yönetimi']
    ];

    $redis->setex(
        $cacheKey,
        300,
        json_encode($topics)
    );
}

print_r($topics);

Not: Bu örnekte veritabanı sorgusu yerine örnek bir dizi kullanılmıştır. Gerçek projede
KOD
1$topics

verileri MySQL sorgusundan alınmalıdır. Kodun çalışması için PHP Redis eklentisinin kurulu olması gerekir.
Buradaki
KOD
1300

değeri, önbelleğin 300 saniye yani 5 dakika boyunca geçerli olacağını belirtir.

En Önemli Konu: Cache Invalidation

Redis kullanırken karşılaşılan temel sorunlardan biri, veritabanındaki veri değiştiğinde önbelleğin güncel kalmasını sağlamaktır.
Örneğin bir forum konusunun başlığı değiştirildiğinde Redis'teki eski veri gösterilmeye devam edebilir.
Bunu önlemek için birkaç yöntem kullanılabilir:
  1. Veri güncellendiğinde ilgili cache anahtarını silmek.
  2. Önbelleğe kısa bir geçerlilik süresi vermek.
  3. İhtiyaca göre cache sürümleme veya etiket tabanlı bir yaklaşım kullanmak.
Küçük projelerde TTL yeterli olabilirken, yoğun trafik alan sistemlerde daha dikkatli bir önbellek stratejisi gerekir.

Redis Her Projede Gerekli mi?

Hayır. Küçük bir web sitesinde doğru indekslenmiş SQL sorguları ve uygun veritabanı tasarımı yeterli olabilir.
Redis eklemek yeni bir servis, bellek tüketimi, izleme ve bakım ihtiyacı oluşturur. Bu nedenle önce yavaş sorguların ve darboğazların tespit edilmesi, ardından gerçekten fayda sağlayacak noktalarda cache kullanılması daha mantıklıdır.

Sonuç

Redis, doğru kullanıldığında PHP uygulamalarının performansını artırabilecek güçlü bir araçtır. Ancak her veriyi önbelleğe almak yerine, sık okunan ve yeniden oluşturulması maliyetli olan verileri seçmek gerekir.
Sizce bir forum sisteminde Redis en çok hangi alanlarda fayda sağlar?
  • Ana sayfa ve popüler konular
  • Kullanıcı oturumları
  • Bildirimler ve çevrimiçi kullanıcı sayısı
  • API yanıtları
  • Arama sonuçları
Kendi deneyimlerinizi ve kullandığınız cache yöntemlerini paylaşabilirsiniz.
● WEBMASTER ●
Hayatın anlamı bir noktalı virgülde gizlidir.
« every fix is a win »
#DevMood
#2
Ellerine sağlık
A6d55tm

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi