← Tüm yazılar

Redis nedir ve ne zaman kullanılır?

Burncode Team 3 dk okuma

Redis o kadar sık “sadece bir önbellek” olarak tanımlanıyor ki insanlar onu hafife alıyor. Bu üzücü, çünkü gerçekten çok yönlü bir araç ve arka planda gerçekte ne yaptığını anladığınızda neden bu kadar çok canlı sistemde karşımıza çıktığı apaçık ortaya çıkıyor.

Redis aslında nedir?

Redis bellek içi bir veri deposudur: Verileri diskte değil RAM'de tutar; desteklediği işlemlerde geleneksel bir veritabanından çok daha hızlı olmasının sebebi de budur. Bellekten okuma mikrosaniyeler sürer; diskten okuma ise hızlı bir SSD'den bile olsa belirgin şekilde daha uzun sürer. Redis'in var olma sebebi tamamen bu hız farkıdır.

Sıradan bir anahtar-değer önbelleğinin aksine Redis, gerçekten işe yarayan veri yapılarını doğrudan destekler: string'ler, listeler, kümeler, sıralı kümeler, hash'ler. Yani yalnızca basit veri bloklarını saklayıp geri almakla sınırlı değilsiniz. Bir listeye eleman ekleyip çıkarabilir, bir sayacı atomik olarak artırabilir ya da sıralı bir kümeyi puana göre sorgulayabilirsiniz; hepsi yerel ve hızlı işlemler olarak.

Redis gerçekte nerelerde kullanılıyor?

  • Önbellekleme: En yaygın kullanım. Maliyetli bir veritabanı sorgusunun ya da API çağrısının sonucunu Redis'te saklayın ve sonraki isteklerde her seferinde yeniden hesaplamak yerine bellekten sunun.
  • Oturum depolama: Kullanıcı oturum verilerinin sürekli okunup yazılması gerekir ve uzun vadeli kalıcılık garantisine ihtiyaç duymaz; bu da onları bu kadar hızlı bir araç için doğal bir aday yapar.
  • İstek sınırlama (rate limiting): Redis'in atomik sayaç işlemleri, “Bu IP son bir dakikada çok fazla istek yaptı mı?” kontrolünü hızlı ve güvenilir hâle getirir.
  • Gerçek zamanlı skor tabloları: Sıralı kümeleri, sürekli güncellenen “puana göre ilk 10” sorguları için neredeyse birebir tasarlanmıştır.
  • Pub/sub mesajlaşma: Redis, bir sistemin farklı parçaları arasında gerçek zamanlı mesaj yayınlayabilir; bu da canlı bildirimler gibi işler için oldukça kullanışlıdır.
  • İş kuyrukları: Pek çok arka plan iş sistemi, işlenmeyi bekleyen görevler için arka depo olarak Redis'i kullanır.

Anlamanız gereken ödünleşim

Redis'in hızı bellekte yaşamasından gelir ve bellek, varsayılan olarak diskten hem daha pahalı hem de daha az kalıcıdır. Redis sunucunuz yeniden başlarsa, kalıcılığı açıkça yapılandırmadıysanız veriler kaybolabilir (Redis bunu destekler, ancak bunun da kendi ödünleşimleri vardır). Pratikteki anlamı şu: Redis, ya gözden çıkarılabilir ya da yeniden oluşturulabilir veriler için mükemmeldir — bir önbellek her zaman kaynak veritabanından yeniden oluşturulabilir — ve kaybetmeyi gerçekten göze alamayacağınız herhangi bir şey için kullanıyorsanız dikkatli bir yapılandırma gerektirir.

Gerçekte ne zaman ona başvurmalısınız?

Maliyetli olan ve her istekte yeniden hesaplanması gerekmeyen bir sorgunuz ya da hesaplamanız varsa onu Redis'te önbelleğe alın. İstek sınırlama, gerçek zamanlı sayaçlar ya da skor tabloları içeren bir şey geliştiriyorsanız Redis bu işi genel amaçlı bir ilişkisel veritabanının hiçbir zaman yapamayacağı kadar iyi çözer. Verileriniz bir sunucu yeniden başlatmasından mutlaka sağ çıkmak zorundaysa ve başka hiçbir yerden yeniden oluşturulamıyorsa, bu iş Postgres gibi birincil hedefi kalıcılık olan bir veritabanına daha uygundur.

Bir sistemin hangi parçalarının Redis gibi hızlı ve geçici bir depoya, hangilerinin kalıcı bir veritabanına ait olduğunu tam olarak bilmek, neredeyse her bulut altyapısı projemizde verdiğimiz bir karardır. Bunu doğru yapmak çoğu zaman gerçek yük altında hızlı kalan bir ürünle büyüdükçe sessizce yavaşlayan bir ürün arasındaki farktır.