İletişim

Redis Nedir?

Kısa tanım

Redis, veriyi RAM'de tutan ve değer olarak yalnızca metin değil liste, hash, küme, sıralı küme ve stream gibi veri yapıları saklayabilen bir bellek içi veri deposudur. Okuma ve yazmalar genellikle milisaniyenin altında tamamlandığı için en çok önbellek, oturum deposu, hız sınırlama sayacı ve iş kuyruğu olarak kullanılır. Veriyi diske yazmak için anlık görüntü (RDB) ve komut günlüğü (AOF) seçenekleri sunar.

Diğer adları: Redis Open Source, Remote Dictionary Server, bellek içi veri deposu, in-memory data store

Uygulamanın veriyi önce Redis önbelleğinde aradığı, bulamayınca veritabanından alıp önbelleğe yazdığı ve sonraki istekte milisaniyede okuduğu akış

Bellekte yaşayan bir veri yapısı sunucusu

Redis bütün veri kümesini RAM'de tutar; disk yalnızca kalıcılık için kullanılır. Bu yüzden tek bir anahtarı okumak ya da artırmak, ağ gecikmesi hariç, genellikle mikrosaniyeler mertebesinde sürer. Redis'i sıradan bir anahtar-değer deposundan ayıran şey, değerin kendisinin bir veri yapısı olabilmesidir: bir listeye eleman eklemek, bir sıralı kümede ilk on kaydı almak ya da bir hash'in tek alanını güncellemek doğrudan sunucuda yapılır, veriyi uygulamaya çekip geri yazmaya gerek kalmaz.

Komutlar ana iş parçacığında sırayla yürütüldüğü için her komut atomiktir. İki istemci aynı anda INCR çalıştırdığında hiçbir artış kaybolmaz. Bunun öteki yüzü, tek bir yavaş komutun herkesi bekletmesidir.

Veri tipiTipik kullanım
StringSayaçlar, önbelleğe alınmış JSON veya HTML parçaları
HashAlanlardan oluşan nesneler, ör. oturum verisi
ListBasit kuyruklar, son N olay
SetTekil değerler: etiketler, bugünkü benzersiz ziyaretçiler
Sorted setSkor tabloları, zamana göre sıralı kayıtlar, kayan pencereli limitler
StreamTüketici gruplarıyla okunan, yalnızca eklemeli olay günlüğü

Güncel Redis Open Source sürümleri bunlara ek olarak JSON, zaman serisi, vektör kümeleri ve Bloom filtresi gibi olasılıksal veri tiplerini de içerir.

Gerçek projelerde nerede kullanılır?

Önbellek ve oturumlar

En yaygın kullanım, veritabanı sorgularının ya da dış API yanıtlarının sonucunu süre sınırıyla saklamaktır: SET product:42 '{...}' EX 300 kaydı beş dakika sonra kendiliğinden siler. Desenin ayrıntıları önbellek maddesinde anlatılıyor. Birden fazla uygulama sunucusunun aynı oturum verisini paylaşması gerektiğinde de Redis sık tercih edilen ortak depodur.

Hız sınırlama

Sabit pencereli bir hız sınırlama için istemci ve dakika bazında bir sayaç yeterlidir:

MULTI
INCR rl:203.0.113.7:202610031405
EXPIRE rl:203.0.113.7:202610031405 60
EXEC
# Dönen sayaç 100'ü aşıyorsa istek 429 ile reddedilir

İki komutun MULTI/EXEC içinde birlikte gönderilmesi, sayaç oluşup süresi atanmadan bağlantının kopması gibi ara durumları önler. Daha düzgün bir dağılım gerekiyorsa sıralı kümelerle kayan pencere uygulanabilir.

Kuyruklar

Bir listeye LPUSH ile iş ekleyip işçilerin BRPOP ile beklemesi, en basit iş kuyruğudur. Ancak işçi işi aldıktan sonra çökerse iş kaybolur. Stream'ler tüketici grupları ve onay (XACK) mekanizmasıyla bu boşluğu kapatır; onaylanmamış iş başka bir işçiye yeniden atanabilir. Popüler arka plan iş kütüphanelerinin önemli bir kısmı altyapı olarak Redis kullanır.

Kalıcılık: ne kadar veri kaybını göze alıyorsunuz?

  • RDB: Belirli aralıklarla veri kümesinin anlık görüntüsü alınır. Dosya küçüktür, yedek ve hızlı yeniden başlatma için idealdir; ama son görüntüden sonraki birkaç dakikalık yazma çökmede kaybolabilir.
  • AOF: Her yazma komutu bir günlüğe eklenir. Varsayılan appendfsync everysec ayarında en kötü durumda yaklaşık bir saniyelik veri kaybedilir; always daha güvenli ama çok daha yavaştır.
  • İkisi birlikte: Redis belgeleri, ilişkisel bir veritabanına yakın veri güvenliği isteniyorsa iki yöntemin birlikte kullanılmasını önerir.
  • Kalıcılık yok: Saf önbellek senaryolarında bilinçli olarak seçilebilir; uygulama boş bir Redis ile de doğru çalışmalıdır.

Bellek sınırı (maxmemory) ve dolduğunda hangi anahtarların atılacağını belirleyen eviction politikası, kalıcılık kadar önemli bir yapılandırmadır. Önbellek için uygun olan, eski anahtarları atan bir politika; kuyruk için ise hiçbir zaman veri atmayan ayardır.

Lisans: 2024 ve 2025'te ne değişti?

Redis 7.2.x ve önceki sürümler BSD-3 lisanslıdır. Mart 2024'te sonraki sürümler (7.4.x–7.8.x) RSALv2 ve SSPLv1 ikili lisansına geçti; Redis'in kendi açıklamasına göre bu iki lisans da açık kaynak lisans değildir. Redis 8'den itibaren kullanıcılar RSALv2, SSPLv1 ve OSI onaylı açık kaynak lisansı AGPLv3 arasından seçim yapabilir. Güncel metin redis.io'daki lisans sayfasında yer alıyor. 2024 değişikliğinin ardından Linux Foundation desteğiyle BSD lisanslı Valkey projesi ortaya çıktı; Valkey, BSD lisanslı Redis kodunu içerir. Kendi sunucunuzda kullanım ile Redis'i başkalarına yönetilen hizmet olarak sunmak lisans açısından farklı sonuçlar doğurabileceği için kurum içi değerlendirme yapılmalıdır.

Sık yapılan hatalar

  • Üretimde KEYS * çalıştırmak: Tüm anahtarları tararken sunucuyu bloke eder; yerine SCAN kullanılmalıdır.
  • Süresiz anahtarlarla belleği doldurmak: Önbellek kayıtlarına mutlaka TTL verilmelidir.
  • Kritik iş verisini kalıcılığı kapalı bir Redis'te tek kopya olarak tutmak.
  • Redis portunu parola ve ağ kısıtlaması olmadan internete açmak.

Redis, NoSQL ailesinin anahtar-değer kolunda yer alır ve çoğu mimaride asıl veritabanının yerine değil, yanında çalışır.

İlgili terimler

← Sözlüğe dön