Bloga Dön
Özel Yazılım

Redis Nedir? Önbellek (Cache) Ne İşe Yarar?

Redis nedir, önbellek (cache) ne işe yarar? Bellekte çalışan anahtar değer deposunun kullanım alanları, cache-aside deseni, TTL ve geçersiz kılma, oturum, kuyruk ve hız sınırlama; Redis ne zaman gerekir, ne zaman gereksizdir.

RedisÖnbellekCacheBackendPerformans

Redis, verileri diskte değil bellekte (RAM) tutan, açık kaynak bir anahtar değer veri deposudur. Kısa cevap: en sık kullanımı önbellektir (cache); sık okunan ve pahalı hesaplanan sonuçları ana veritabanından önce Redis'te tutarak yanıt süresini kısaltır ve veritabanının yükünü azaltır. Ana veritabanının yerine geçmez, onun önünde duran hızlı bir katmandır.

Redis nedir, nasıl çalışır?

Redis her veriyi bir anahtarla saklar: "product:42" anahtarının değeri bir JSON metni, "cart:alice" anahtarının değeri bir liste olabilir. Bellekten okunduğu için tek bir okuma genellikle milisaniyenin altında tamamlanır. Düz metnin yanında liste, küme, sıralı küme (sorted set), hash ve stream gibi veri yapıları da sunar; bu yüzden yalnızca önbellek olarak değil, sayaç, sıralama tablosu ve basit kuyruk olarak da kullanılır. Her anahtara bir yaşam süresi (TTL) verilebilir; süre dolunca anahtar kendiliğinden silinir.

Redis'in diske yazma seçenekleri (RDB anlık görüntü ve AOF günlüğü) vardır, ama tasarımı gereği asıl kayıt yeri değildir. Siparişler, ödemeler, kullanıcı hesapları gibi kaybolmaması gereken veriler ilişkisel bir veritabanında durur; seçim için PostgreSQL mi MySQL mi yazımıza bakabilirsiniz. Redis o verinin hızlı okunan kopyasını taşır.

Önbellek (cache) ne işe yarar?

Bir ürün sayfası her açıldığında aynı sorgular veritabanına tekrar tekrar gider. Önbellek, bu sonucun bir kopyasını kısa süreliğine saklar ve sonraki istekleri kopyadan karşılar. Kazanç iki yönlüdür: kullanıcı daha hızlı yanıt alır ve veritabanı aynı işi binlerce kez yapmaktan kurtulur. Sayfa hızının tamamı önbellekten gelmez; görsel, JavaScript ve sunucu tarafı ayarları için web sitesi hızlandırma yolları yazısı daha geniş bir liste veriyor.

Redis hangi işlerde kullanılır?

  • Sorgu ve API önbelleği: pahalı sorgu sonuçlarını ya da dış servis yanıtlarını belirli bir süre saklamak.
  • Oturum (session) deposu: birden fazla sunucu çalıştığında kullanıcının oturumunu hepsinin okuyabildiği tek bir yerde tutmak.
  • Hız sınırlama (rate limiting): bir IP ya da kullanıcı için dakikadaki istek sayısını sayaçla tutmak ve sınırı aşanı durdurmak.
  • Kuyruk ve arka plan işleri: e-posta, bildirim ya da rapor üretimi gibi işleri sıraya koyup ayrı bir süreçte işlemek.
  • Sıralama tabloları ve sayaçlar: sıralı küme ile anlık puan tablosu, görüntülenme ve beğeni sayaçları.
  • Dağıtık kilit: aynı işin iki sunucuda aynı anda çalışmasını engellemek, örneğin zamanlanmış bir görevin tek kopyasının koşması.

Cache-aside deseni: Redis ile önbellek nasıl kurulur?

En yaygın desen cache-aside (lazy loading) desenidir. Uygulama önce Redis'e sorar; veri varsa onu döner. Yoksa veritabanından okur, sonucu bir TTL ile Redis'e yazar ve döner. Veri değiştiğinde önce veritabanı güncellenir, sonra ilgili anahtar silinir; bir sonraki okuma taze veriyi yeniden önbelleğe alır. Aşağıdaki Node.js örneği bu akışı gösteriyor:

import { createClient } from 'redis';

const redis = createClient({ url: process.env.REDIS_URL });
await redis.connect();

// Cache-aside: read from Redis first, fall back to the database on a miss.
async function getProduct(id: string, loadFromDb: (id: string) => Promise<object | null>) {
  const key = 'product:' + id;
  const cached = await redis.get(key);
  if (cached) return JSON.parse(cached);

  const product = await loadFromDb(id);
  if (product) {
    // A TTL keeps stale data from living forever.
    await redis.set(key, JSON.stringify(product), { EX: 300 });
  }
  return product;
}

// On every write, the database is updated first and the cache key is removed.
async function onProductUpdated(id: string) {
  await redis.del('product:' + id);
}
Önbellekteki her anahtarın iki sorusu vardır: ne zaman kendiliğinden ölür (TTL) ve hangi yazma işlemi onu siler? İkisine de cevabı olmayan anahtar, er geç kullanıcıya eski veri gösterir.

Önbellekte en sık yapılan hatalar

  • TTL vermemek: geçersiz kılma unutulan bir yazma yolunda eski veri süresiz kalır.
  • Kullanıcıya özel veriyi ortak anahtarla saklamak: anahtar kullanıcı ya da yetki bilgisini içermezse bir kullanıcının verisi diğerine görünebilir.
  • Önbelleği tek kayıt yeri sanmak: Redis yeniden başladığında ya da bellek dolup anahtar çıkardığında sistem veritabanından toparlanabilmelidir.
  • Aynı anda süresi dolan çok sayıda anahtar: hepsi aynı saniyede veritabanına düşer; TTL'ye küçük rastgele bir pay eklemek yükü dağıtır.
  • Her şeyi önbelleğe almak: nadiren okunan ya da zaten hızlı olan veriyi saklamak bellek harcar, kazanç getirmez.

Redis ne zaman gerekir, ne zaman gereksizdir?

Tek sunucuda çalışan, trafiği düşük ve sorguları zaten hızlı bir uygulamada Redis eklemek, izlenmesi ve yedeklenmesi gereken yeni bir parça demektir. Önce yavaş sorgular ölçülmeli, eksik indeksler eklenmeli, uygulama içindeki basit bellek önbelleği denenmelidir. Redis şu durumlarda anlamlı hâle gelir: uygulama birden fazla sunucuda çalışıyor ve oturum ya da önbellek ortak olmalı; aynı veri saniyede çok kez okunuyor; dış bir API yavaş ya da istek başına ücretli; hız sınırlama, kuyruk veya dağıtık kilit ihtiyacı var. Geliştirme ortamında Redis'i uygulamayla birlikte ayağa kaldırmanın en pratik yolu bir konteynerdir; bunun için Docker nedir yazımıza göz atabilirsiniz.

Sonuç

Redis, bellekte çalışan hızlı bir anahtar değer deposudur ve en çok önbellek, oturum, kuyruk ve hız sınırlama için kullanılır. Doğru kurulduğunda veritabanının önünde bir tampon olur; TTL ve geçersiz kılma kuralları baştan düşünülmezse eski veri sorununa dönüşür. Projenizde önbellek katmanının gerçekten gerekip gerekmediğini birlikte değerlendirmek isterseniz özel yazılım ve web geliştirme sayfalarımıza bakabilir ya da teklif alın formundan bize yazabilirsiniz.

Projenizi Hayata Geçirelim

Web sitesi, mobil uygulama veya kurumsal yazılım projeniz için ücretsiz danışmanlık alın.

Ücretsiz Teklif AlÖzel Yazılım hizmetimizi inceleyin