Ulaşım
- Adres:Batıkent Mh. 8910 Sk. 6. Etap 1H No: 18 Yeni Toki Eyyübiye / Şanlıurfa (Yeni Alım Satım Karşısı)
- Telefon:0 (545) 528 88 93
- eMail: info@alestaweb.com
Web uygulamanız yavaş mı çalışıyor? Veritabanı sorguları çok mu uzun sürüyor? Çözüm: Redis Cache! Alesta Web olarak Redis cache kullanımını (Redis cache tutorial) sıfırdan anlatıyoruz. Bu rehber ile uygulamanızı 10 kata kadar hızlandırabilirsiniz.
Redis (Remote Dictionary Server), bellekte veri tutan (in-memory) açık kaynaklı bir veri yapısı deposudur. Basitçe söylemek gerekirse, süper hızlı bir veritabanı düşünün - veriler RAM'de tutulduğu için disk tabanlı veritabanlarından 100 kat daha hızlı! Alesta Web olarak tüm projelerimizde Redis kullanıyoruz.
Redis sadece cache değil! Veritabanı (database), mesaj kuyruğu (message broker), session yönetimi ve gerçek zamanlı analitik için de kullanılabilir.
Alesta Web deneyimlerine göre Redis'in avantajları:
| Avantaj (Advantage) | Açıklama (Description) |
|---|---|
| Hız (Speed) | Mikrosaniye cevap süreleri (microsecond latency) |
| Çeşitli Veri Yapıları | String, Hash, List, Set, Sorted Set |
| Persistence | Verileri diske kaydedebilir (optional) |
| Atomik İşlemler | Thread-safe, race condition yok |
| Pub/Sub | Gerçek zamanlı mesajlaşma (real-time messaging) |
Tipik bir MySQL sorgusu: 50-100ms
Aynı veri Redis'ten: 0.1-1ms
Sonuç: 100x daha hızlı!
Alesta Web olarak farklı platformlar için kurulum rehberi hazırladık:
# Sistem güncellemesi
sudo apt update
# Redis kurulumu
sudo apt install redis-server
# Redis'i başlat
sudo systemctl start redis-server
sudo systemctl enable redis-server
# Kurulumu doğrula
redis-cli ping
# Çıktı: PONG
# Docker ile kurulum (önerilen)
docker run -d --name redis -p 6379:6379 redis
# Bağlantı testi
docker exec -it redis redis-cli ping
# Çıktı: PONG
# Homebrew ile kurulum
brew install redis
# Redis'i başlat
brew services start redis
# Bağlantı testi
redis-cli ping
# Çıktı: PONG
Redis CLI ile kullanabileceğiniz temel komutlar:
# Değer kaydet (SET key value)
SET kullanici:1:isim "Ahmet"
# OK
# Değer oku (GET key)
GET kullanici:1:isim
# "Ahmet"
# TTL ile kaydet (saniye cinsinden expire)
SET oturum:abc123 "user_data" EX 3600
# 1 saat sonra otomatik silinir
# TTL kontrol
TTL oturum:abc123
# 3598 (kalan saniye)
# Hash kaydet (nesne gibi)
HSET kullanici:1 isim "Ahmet" yas 28 sehir "Istanbul"
# Tek alan oku
HGET kullanici:1 isim
# "Ahmet"
# Tüm alanları oku
HGETALL kullanici:1
# 1) "isim"
# 2) "Ahmet"
# 3) "yas"
# 4) "28"
# 5) "sehir"
# 6) "Istanbul"
# Listeye ekle
LPUSH son_haberler "Haber 1"
LPUSH son_haberler "Haber 2"
LPUSH son_haberler "Haber 3"
# Son 10 haberi al
LRANGE son_haberler 0 9
# 1) "Haber 3"
# 2) "Haber 2"
# 3) "Haber 1"
# Tek key sil
DEL kullanici:1
# Pattern ile sil (dikkatli kullan!)
# redis-cli KEYS "oturum:*" | xargs redis-cli DEL
# Tüm veritabanını temizle (DİKKAT!)
FLUSHDB
Alesta Web olarak en çok kullandığımız cache pattern'leri:
# En yaygın pattern - uygulama cache'i yönetir
def get_user(user_id):
# 1. Önce cache'e bak
cached = redis.get(f"user:{user_id}")
if cached:
return json.loads(cached)
# 2. Cache'de yoksa veritabanından al
user = database.get_user(user_id)
# 3. Cache'e kaydet (1 saat TTL)
redis.setex(f"user:{user_id}", 3600, json.dumps(user))
return user
# Yazma işleminde cache ve DB birlikte güncellenir
def update_user(user_id, data):
# 1. Veritabanını güncelle
database.update_user(user_id, data)
# 2. Cache'i güncelle
redis.setex(f"user:{user_id}", 3600, json.dumps(data))
Cache-Aside pattern'i çoğu senaryo için idealdir. Write-Through ise tutarlılığın kritik olduğu durumlarda tercih edilir (consistency is critical).
Python'da Redis kullanmak çok kolay. İşte Alesta Web'in hazırladığı örnekler:
# redis-py kütüphanesini kur
pip install redis
import redis
import json
# Redis bağlantısı
r = redis.Redis(host='localhost', port=6379, db=0)
# String kaydet ve oku
r.set('mesaj', 'Merhaba Redis!')
print(r.get('mesaj')) # b'Merhaba Redis!'
# TTL ile kaydet (60 saniye)
r.setex('gecici_veri', 60, 'Bu veri 60 saniye sonra silinecek')
# JSON veri kaydet
kullanici = {'isim': 'Ahmet', 'yas': 28}
r.set('kullanici:1', json.dumps(kullanici))
# JSON veri oku
veri = json.loads(r.get('kullanici:1'))
print(veri['isim']) # Ahmet
import redis
import json
import requests
r = redis.Redis(host='localhost', port=6379, db=0)
def get_weather(city):
"""Hava durumu API'sini cache'le"""
cache_key = f"weather:{city}"
# Cache'de var mı kontrol et
cached = r.get(cache_key)
if cached:
print("Cache'den geldi!")
return json.loads(cached)
# API'den al
print("API'den çekiliyor...")
response = requests.get(f"https://api.example.com/weather/{city}")
data = response.json()
# 10 dakika cache'le (600 saniye)
r.setex(cache_key, 600, json.dumps(data))
return data
# İlk çağrı - API'den gelir
weather = get_weather("Istanbul")
# İkinci çağrı - Cache'den gelir (çok hızlı!)
weather = get_weather("Istanbul")
Alesta Web deneyimlerimizden öğrendiklerimiz:
user:123:profile formatı kullanınredis-cli INFO ile durumu izleyinKEYS * kullanmayın (blocking)Redis varsayılan olarak şifresizdir. Production'da mutlaka requirepass ayarlayın ve güvenlik duvarı kuralları ekleyin (always set password in production).
Bu makalede kullanılan bilgiler aşağıdaki güvenilir kaynaklardan derlenmiştir:
Alesta Web olarak tüm komutları test ettik ve doğruladık.
Artık Redis ile uygulamalarınızı hızlandırabilirsiniz. Alesta Web olarak sorularınız için buradayız.
Hızlı Özet / Quick Summary:
Faydalı Linkler / Useful Links:
© 2025 AlestaWeb - Tüm hakları saklıdır.