Bellek baskısını sadece “RAM yetmedi” diye okumayın
Redis hızlıdır ama sınırsız değildir. maxmemory sınırına yaklaşınca eviction veya OOM davranışı devreye girer. Önbellek olarak kullanılan Redis ile kalıcı kuyruk/oturum deposu olarak kullanılan Redis aynı policy ile yönetilmemelidir.
Bu yüzden “RAM artır” kararı bazen doğru, bazen de pahalı bir ertelemedir. Eğer TTL yoksa veya birkaç büyük key belleği şişiriyorsa kapasite artırmak yalnızca problemi biraz ileri taşır.
İlk kontrol used_memory, maxmemory, mem_fragmentation_ratio ve evicted_keys değerleridir. Bu değerler kapasite mi, TTL eksikliği mi, yoksa büyük key problemi mi olduğunu gösterir.
Bellek ve eviction kontrolü
redis-cli -u "$REDIS_URL" INFO memory redis-cli -u "$REDIS_URL" INFO stats | egrep "evicted_keys|keyspace_hits|keyspace_misses" redis-cli -u "$REDIS_URL" SLOWLOG GET 10
TTL, önbellek katmanının ahlakıdır
Önbellek keyleri sonsuza kadar yaşarsa Redis zamanla veritabanına dönüşür ama veri modeli buna göre tasarlanmamıştır. TTL bu yüzden küçük bir teknik detay değil, önbellek katmanının sözleşmesidir.
Kullanıcı oturumu gibi kritik verilerde TTL iş kuralına göre belirlenmeli; analitik sayaç veya geçici hesaplarda kısa TTL tercih edilmelidir.
Yaygın önbellek kullanım örneği
const key = `product:${tenantId}:${productId}`
const cached = await redis.get(key)
if (cached) return JSON.parse(cached)
const product = await db.products.findById(productId)
await redis.set(key, JSON.stringify(product), { EX: 300 })
return productÖnbellek key tasarımı tenant bilgisini içermeli ve mutlaka TTL ile yazılmalıdır.
Big key ve riskli komutları güvenli tespit edin
Redis gecikme spike sorunlarında tek bir büyük key, büyük liste veya bloklayıcı komut tüm istekleri etkileyebilir. KEYS komutu canlı ortamda kullanılmamalıdır; SCAN ile parçalı gezinmek ve örnekleme yapmak daha güvenlidir.
SLOWLOG içinde KEYS, HGETALL, SMEMBERS, LRANGE 0 -1 gibi komutlar görünüyorsa veri modeli tekrar değerlendirilmelidir. Büyük koleksiyonlar sayfalama, parçalama veya farklı bir depolama modeline taşınmalıdır.
SCAN ile güvenli örnekleme
redis-cli -u "$REDIS_URL" --scan --pattern "product:*" | head -100 redis-cli -u "$REDIS_URL" MEMORY USAGE "product:acme:123" redis-cli -u "$REDIS_URL" TTL "product:acme:123"
TürkDB ile yavaş komut ve kapasite kararı
SLOWLOG içinde KEYS, büyük SMEMBERS, büyük LRANGE veya Lua scriptleri görünüyorsa sorun yalnızca kapasite değildir. Önce komut desenini düzeltmek, sonra kapasiteyi artırmak daha sağlıklı sonuç verir.
TürkDB Redis gözlem akışı
turkdb cluster create --name app-cache \ --type redis \ --plan starter \ --region ist1 \ --wait turkdb cluster slow-queries app-cache --limit 20 turkdb cluster scale app-cache --storage 20