Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Redis için Maxmemory Politikasını Yapılandırma ve LRU ile Bellek Kullanımını Optimize Etme

✖ Kapat
Duyuru
✖ Kapat
Duyuru

thedevx

Üye
Katılım
14 Mart 2026
Mesajlar
56
Merhaba arkadaşlar, bugün sizlere Redis sunucularında sıkça karşılaştığımız "OOM" (Out Of Memory) hatalarını önlemenin ve bellek kullanımını daha verimli hale getirmenin temel yöntemlerinden birini anlatacağım. Redis, varsayılan olarak tüm sistemi kullanma eğilimindedir. Bu rehberle, Redis'e bir bellek sınırı koymayı ve bu sınıra ulaşıldığında hangi anahtarların silineceğini belirleyen politikayı (LRU ve türevleri) nasıl yapılandıracağımızı öğreneceğiz. Bu sayede sunucunuz daha stabil çalışacak ve bellek taşmasından kaynaklanan çökmelerin önüne geçebileceksiniz.

📊 Maxmemory Nedir ve Neden Önemli?

Redis, inanılmaz hızlı bir bellek içi (in-memory) veri deposudur. Ancak fiziksel belleğiniz sınırsız değil. `maxmemory` ayarı, Redis'in kullanabileceği maksimum bellek miktarını bayt cinsinden belirler. Bu limiti koymazsanız, Redis tüm kullanılabilir belleği tüketip sistemin swap kullanmasına veya Linux OOM Killer'ın Redis'i sonlandırmasına neden olabilir. Bu ayar, Redis'i "korumak" için kritiktir.

⚙️ Temel Konfigürasyon Adımları

Öncelikle, Redis konfigürasyon dosyamızı açıyoruz. Benim sunucularda genelde bu dosya /etc/redis/redis.conf yolunda oluyor. Nano veya vi editörünü kullanabilirsiniz.

Bash:
sudo nano /etc/redis/redis.conf

Dosya içinde `maxmemory` diye aratın. Büyük ihtimalle satır başında `#` işaretiyle yorum satırı olarak kapalı duruyordur. Bu satırı bulup düzenleyeceğiz. Diyelim ki sunucumuzda Redis için 1GB bellek ayırmak istiyoruz. 1 Gigabyte = 1073741824 bayttır. Şu ayara çok dikkat etmelisiniz, sunucunuzun toplam RAM'ine göre mantıklı bir değer verin. Redis'e tüm RAM'i vermeyin, sistem ve diğer prosesler için de alan bırakın.

Kod:
# maxmemory <bytes> satırını bulup aşağıdaki gibi değiştirin
maxmemory 1073741824

Sadece limit koymak yetmez. Limit dolduğunda ne olacağını da söylememiz lazım. İşte burada `maxmemory-policy` devreye giriyor.

🎯 Maxmemory Politikaları (LRU ve Diğerleri)

`maxmemory-policy` ayarı, bellek dolduğunda yeni veri yazmak için yer açma stratejisini belirler. En yaygın kullanılan ve optimize edilmiş politikalar LRU (Least Recently Used - En Az Son Kullanılan) tabanlıdır. Politikaları aşağıdaki gibi ayarlayabilirsiniz:

Kod:
maxmemory-policy allkeys-lru

İşte size mevcut politikaların özeti:
`noeviction`: (Varsayılan) Yeni veri YAZMAYA izin vermez, sadece okumaya devam eder. En güvenlisi gibi görünse de, yazma işlemi yapan uygulamalar için hata üretir.
`allkeys-lru`: Tüm anahtarlar arasından en uzun süredir kullanılmayan (LRU algoritması) anahtarları silerek yer açar. Benim sunucularda genelde kullandığım yöntemdir, eğer tüm verilerinizin TTL'si (yaşam süresi) yoksa.
`volatile-lru`: Sadece TTL (yaşam süresi) atanmış anahtarlar arasından LRU'ya göre silme yapar. Sürekli verileriniz (örneğin oturum bilgisi değil de önbelleklenmiş sorgular) için TTL kullanıyorsanız idealdir.
`allkeys-random`: Tüm anahtarlardan rastgele siler.
`volatile-random`: TTL'li anahtarlardan rastgele siler.
`volatile-ttl`: Kalan TTL'si en kısa olan anahtarları siler (TTL'si bitmek üzere olanları temizler).

⚠️ Dikkat Edilmesi Gerekenler ve İnce Ayarlar

LRU algoritması Redis'te tam bir LRU değil, yaklaşık LRU kullanır. Performans ve bellek verimliliği için bu şekilde tasarlanmıştır. Doğruluğunu `maxmemory-samples` ayarı ile kontrol edebilirsiniz. Varsayılan değer 5'tir. Redis, silinecek anahtarı seçerken bu sayıda rastgele anahtar örneğine bakar ve içlerinden en iyi (en eski kullanılan) adayı seçer. Bu değeri artırmak (örneğin 10) LRU doğruluğunu artırır ama CPU kullanımını da biraz artırabilir.

Kod:
maxmemory-samples 10

Tüm bu değişiklikleri yaptıktan sonra, Redis servisini yeniden başlatmayı unutmayın.

Bash:
sudo systemctl restart redis-server
# veya
sudo service redis restart

Ayarların etkin olduğunu komut satırından kontrol etmek için Redis CLI'ye bağlanıp `CONFIG GET` komutunu kullanabilirsiniz.

Bash:
redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
127.0.0.1:6379> CONFIG GET maxmemory-policy

✅ Sonuç ve Öneriler

Bu konfigürasyon, Redis sunucunuzu üretim ortamında çalıştırmanın olmazsa olmazlarındandır. `maxmemory` mutlaka belirlenmeli ve uygulamanızın veri erişim modeline uygun bir politika (benim önerim genellikle `allkeys-lru`) seçilmelidir. Bu sayede Redis, belirlenen sınırlar içinde tahmin edilebilir ve kararlı bir şekilde çalışmaya devam edecektir.

Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı senaryolar için (örneğin hem TTL'li hem TTL'siz veri karışıksa) hangi politikayı tercih ediyorsunuz? Tecrübelerinizi paylaşın veya aklınıza takılan bir şey olursa aşağıya yazmaktan çekinmeyin. Sorularınızı bekliyorum arkadaşlar.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri