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 Veri Türlerini Pratik Senaryolarla Kullanma: Oturum Yönetimi ve Sayfa Önbelleği Örnekleri

stackor

Üye
Katılım
14 Mart 2026
Mesajlar
16
Merhaba arkadaşlar, bugün sizlere Redis'in gücünü gerçek hayat senaryoları üzerinden göstermek istiyorum. Özellikle yeni başlayan sistem yöneticisi arkadaşlarımız Redis'i sadece basit bir key-value store olarak görüyor. Halbuki veri tiplerini doğru kullanınca performans ve esneklik konusunda inanılmaz fırsatlar sunuyor. Bu rehberde, oturum yönetimi ve sayfa önbelleği için nasıl kullanabileceğimizi adım adım işleyeceğiz.

🔐 Senaryo 1: Hash Veri Tipi ile Kullanıcı Oturum Yönetimi

Genellikle oturum bilgilerini tek bir string olarak JSON formatında saklarız. Bu işe yarar ama belli bir alanı güncellemek istediğimizde tüm JSON'u çekip tekrar yazmamız gerekir. Redis Hash veri tipi ile her bir oturum bilgisini ayrı bir field olarak saklayabilir, sadece değişen kısmı güncelleyebiliriz. Benim sunucularda genelde kullandığım yöntem budur.

Öncelikle bir kullanıcı oturum açtığında, oturum bilgilerini bir hash olarak kaydedelim. Kullanıcı ID'sini key, bilgileri de field-value çiftleri olarak saklayacağız.

Bash:
redis-cli
# Kullanıcı oturum bilgilerini hash olarak kaydet
HSET user:session:12345 user_id 12345 username "ahmet_gnl" email "ahmet@ornek.com" last_login "2023-10-27 14:30:00" ip_address "192.168.1.100"
# Belirli bir alanı güncelle (sadece last_login)
HSET user:session:12345 last_login "2023-10-27 15:45:00"
# Sadece bir field'ı okumak istersek
HGET user:session:12345 username
# Tüm oturum bilgisini okumak istersek
HGETALL user:session:12345

Gördüğünüz gibi, kullanıcı IP adresi değişse bile sadece o field'ı güncelleyebiliyoruz. Ayrıca TTL (yaşam süresi) de ekleyebiliriz ki oturum süresi dolunca otomatik silinsin.

Bash:
# Bu oturumun 3600 saniye (1 saat) sonra silinmesini sağla
EXPIRE user:session:12345 3600

🚀 Senaryo 2: Sorted Set ve String ile Sayfa Önbelleği & Sıralama

Bir blog siteniz veya ürün listeniz olduğunu düşünün. En çok okunan 10 makaleyi veya en popüler ürünleri anasayfada göstermek istiyorsunuz. Her istekte veritabanına sorgu atmak yerine, bu bilgiyi Redis'te tutabiliriz. Burada iki veri tipini birlikte kullanacağız: Sorted Set (sıralı küme) ve String.

Sorted Set ile makale ID'lerini ve popülerlik puanlarını (örneğin görüntülenme sayısı) tutarız. String tipi ile de her makalenin HTML çıktısını veya JSON verisini önbellekleriz.

İlk olarak, bir makale görüntülendiğinde popülerlik puanını artıralım.

Bash:
# Sorted Set: key = popular:articles, member = makale_id, score = görüntülenme sayısı
# ZINCRBY komutu, eğer member yoksa oluşturur, varsa skorunu artırır.
ZINCRBY popular:articles 1 101 # ID'si 101 olan makalenin skorunu 1 artır.
ZINCRBY popular:articles 1 205
ZINCRBY popular:articles 1 101 # 101 ID'li makale tekrar görüntülendi, skoru 2 oldu.

Şimdi, anasayfada göstermek üzere en popüler 5 makalenin ID'sini alalım.

Bash:
# Skora göre azalan şekilde (en yüksek skor en başta) ilk 5 member'ı getir.
ZREVRANGE popular:articles 0 4 WITHSCORES

Bu bize makale ID'lerini verecek. Şimdi bu ID'leri kullanarak önbelleklenmiş makale içeriklerini String veri tipinden çekebiliriz. Önbellekleme işlemi şöyle olabilir:

Bash:
# Bir makalenin render edilmiş HTML snippet'ini önbelleğe al (3600 saniye TTL ile)
SET article:cache:101 "<div>Makale İçeriği...</div>" EX 3600
# Önbellekten okuma
GET article:cache:101

⚠️ Dikkat Edilmesi Gerekenler ve Optimizasyon

Bu güçlü yapıyı kurarken şu ayara çok dikkat etmelisiniz:
Bellek Yönetimi: Redis tüm veriyi bellekte tutar. /etc/redis/redis.conf dosyasındaki `maxmemory` ayarını sunucu RAM'inizin yaklaşık %70'ine gelecek şekilde yapılandırın ve bir `maxmemory-policy` (örn: allkeys-lru) belirleyin. Bu, bellek dolduğunda en az kullanılan anahtarların otomatik silinmesini sağlar.
TTL (Time-To-Live) Kullanın: Önbelleklediğiniz her veri için mutlaka bir son kullanma süresi belirleyin (`EX` parametresi). Aksi takdirde eski veriler bellekte kalır.
Key (Anahtar) İsimlendirme: Tutarlı bir isimlendirme şeması kullanın. `user:session:<id>`, `article:cache:<id>`, `popular:articles` gibi. Bu, anahtarları yönetmeyi ve temizlemeyi kolaylaştırır.
Pipeline ve Transaction: Aynı anda çok sayıda komut gönderecekseniz, pipeline kullanarak performansı önemli ölçüde artırabilirsiniz.

✅ Sonuç ve Öneriler

Redis, doğru veri tipi seçimiyle uygulamanızın hızını katlayabilir. Oturum bilgileri için Hash, sıralama ve lider tablolar için Sorted Set, hızlı erişim gereken sabit içerikler için ise String tipi benim en sık başvurduğum yapı taşlarıdır.

Bu yöntemlerle veritabanı yükünüzü ciddi oranda azaltıp, kullanıcı deneyimini iyileştirebilirsiniz. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı senaryolar için hangi Redis veri tiplerini kullanıyorsunuz? Tecrübelerinizi paylaşın veya takıldığınız bir nokta 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