Yazılım'ya dön
Yazılım
Redis Önbellekleme Stratejisi için Claude prompt'u
Optimal modelClaude
Zorlukİleri
KategoriYazılım
Varyant3 adet
prompt.txt
Sen deneyimli bir backend mimarı ve performans mühendisisin. {proje_adi} uygulaması için Redis önbellekleme katmanını sıfırdan tasarla — strateji seçiminden production deployment'a kadar her adımı çalışır kodla göster.
## Proje Parametreleri
- **Backend Stack:** {backend_stack} (örn: "Python/FastAPI", "Node.js/Express", "Go/Gin", "Java/Spring Boot")
- **Veritabanı:** {veritabani} (örn: "PostgreSQL", "MySQL", "MongoDB")
- **Aylık Aktif Kullanıcı:** {kullanici_sayisi} (örn: "50K", "500K", "5M")
- **Kabul Edilebilir Gecikme:** {gecikme_hedefi} ms (örn: "50", "100", "200")
- **Kritik Varlıklar:** {varliklar} (örn: "kullanıcı profili, ürün kataloğu, oturum bilgisi")
---
## Adım 1 — Strateji Seçimi (Karar Matrisi)
Aşağıdaki dört stratejiyi karşılaştır ve {proje_adi} için en uygun ikisini öner. Her satır için {varliklar} varlıklarından biri özelinde somut gerekçe ver:
| Strateji | Ne Zaman Kullan | Cache-DB Tutarlılık | Yazma Yükü | {proje_adi} İçin? |
|----------|----------------|---------------------|------------|-----------------|
| Cache-Aside (Lazy Loading) | | | | |
| Write-Through | | | | |
| Write-Behind (Write-Back) | | | | |
| Read-Through | | | | |
**Seçilen strateji:** [strateji adı] — tek paragraf gerekçe.
---
## Adım 2 — Redis Veri Yapısı Tasarımı
{varliklar} için aşağıdaki tabloyu doldur:
| Varlık | Redis Veri Yapısı | Key Şablonu | TTL | Örnek Değer |
|--------|------------------|-------------|-----|-------------|
| [varlık 1] | String / Hash / List / Sorted Set / Set | `{proje_adi_lower}:{varlık}:{id}` | Xd/Xh/Xm | `{"id": 1, ...}` |
| [varlık 2] | | | | |
| [varlık 3] | | | | |
**Key namespace kuralları:**
- Ortam prefix'i: `prod:` / `staging:` / `dev:`
- Tam şablon: `{ortam}:{proje_adi_lower}:{varlık}:{id_veya_parametre}`
- Maksimum key uzunluğu: 100 karakter
---
## Adım 3 — Temel Cache İşlemleri ({backend_stack} Kodu)
{backend_stack} dilinde aşağıdaki fonksiyonları/metodları yaz:
```
get_cached(key) → Redis'ten al; miss'te DB'den çek, cache'e yaz, döndür
set_cached(key, value, ttl) → JSON serialize et, Redis'e yaz
invalidate(key) → Tek key sil
invalidate_pattern(pattern) → "prod:myapp:user:*" gibi wildcard ile toplu sil (SCAN tabanlı, KEYS kullanma)
```
Her fonksiyon için:
- Hata yönetimi: Redis bağlanamıyorsa uygulamayı durdurma — **graceful degradation** (DB'ye düş)
- Serialization: JSON; tarih/özel tip varsa custom encoder
- Connection pooling: min=5, max=20 bağlantı; idle timeout=300s
Ayrıca şu decorator'ı yaz:
```python
@cached(ttl=300, key_fn=lambda user_id: f"prod:myapp:user:{user_id}")
async def get_user(user_id: str) -> User: ...
```
---
## Adım 4 — Cache Invalidation Stratejisi
{varliklar} varlıklarından birini seçerek şu üç durumu {backend_stack} koduyla göster:
**4a. Tek kayıt güncelleme → cache invalidate:**
```
PUT /api/{varlik}/{id} → DB güncelle → Redis.delete(key)
```
**4b. Toplu güncelleme (örn. kategori altındaki tüm ürünler):**
```
Senaryo: bir kategori fiyatı değişti → o kategorideki tüm ürün cache'leri iptal
Yöntem: Tag-based invalidation (Redis Set'te key listesi tut) veya pattern delete
```
İkisini de göster; avantaj/dezavantaj bir satırda açıkla.
**4c. Event-driven invalidation:**
Veritabanı değişikliği → message queue (Redis Pub/Sub veya harici) → cache worker → invalidate
Kodu ve akış diyagramını (ASCII ok ile) göster.
---
## Adım 5 — Cache Stampede Önleme
Yüksek trafikte aynı anda çok sayıda istek boş cache'e çarparsa DB'ye aşırı yük biner. Şu iki tekniği {backend_stack} koduyla uygula:
**5a. Mutex Lock (Redis SET NX):**
```
if lock = redis.SET("lock:{key}", 1, NX, EX=5):
data = db.fetch(...)
redis.set(key, data, ttl)
redis.delete("lock:{key}")
else:
wait_and_retry(max_attempts=3)
```
**5b. Probabilistic Early Expiration (XFetch Algoritması):**
Gerçek TTL dolmadan önce olasılıksal yenileme — formülü ve {backend_stack} implementasyonunu göster.
Her tekniği ne zaman tercih etmeli? Bir satırda kural yaz.
---
## Adım 6 — Connection Pooling ve Yapılandırma
{backend_stack} için production-ready Redis bağlantı yapılandırması yaz:
```
max_connections: 20
min_idle_connections: 5
connect_timeout: 2s
socket_timeout: 1s
retry_on_timeout: true
retry_count: 3
health_check_interval: 30s
```
Ayrıca şu iki deployment senaryosu için bağlantı URL'si ve hangi durumda kullanılacağını göster:
- **Redis Sentinel** (yüksek erişilebilirlik, tek bölge)
- **Redis Cluster** (yatay ölçekleme, multi-shard)
---
## Adım 7 — Monitoring ve Cache Hit Rate Analizi
Aşağıdaki metrikleri nasıl toplayacağını göster:
| Metrik | Redis Komutu | Alarm Eşiği | Aksiyon |
|--------|--------------|-------------|--------|
| Cache hit rate | `INFO stats` → `keyspace_hits` / total | < %70 → alarm | TTL/strateji gözden geçir |
| Memory kullanımı | `INFO memory` → `used_memory_rss` | > %80 maxmemory | Eviction policy ayarla |
| Bağlantı sayısı | `INFO clients` → `connected_clients` | > max_connections × 0.9 | Pool büyüt |
| Gecikme (ms) | `LATENCY HISTORY command` | p99 > 10ms | Ağ/Redis konfigürasyon incele |
{backend_stack} dilinde bu metrikleri her 60 saniyede bir loglayan bir background task/cron yaz.
---
## Adım 8 — Cache Warming (Soğuk Başlatma Çözümü)
Uygulama yeniden deploy edildiğinde cache boş kalır → ilk istekler yavaş. Şu warm-up stratejisini uygula:
```
deploy tamamlandı
→ warm_cache() görevi tetikle (arka planda, async)
→ {varliklar} varlıklarının en sık erişilen %20'sini DB'den çekip cache'e yaz
→ İlerlemeyi logla: "Cache warm: 450/2000 kayıt yüklendi"
→ Tamamlandığında health endpoint'te is_cache_warm: true döndür
```
{backend_stack} dilinde bu warm-up fonksiyonunu yaz; batch boyutu 50, DB'ye max 5 paralel sorgu.
---
## Kısıtlar
- Redis bağlantısı kesilirse uygulama ÇÖKMEMELI; her cache işlemi try/except ile sarılmalı, hata loglanmalı, DB'ye düşülmeli
- Ham token, şifre veya PII (kişisel kimlik bilgisi) ASLA Redis'e yazılmasın
- Key'ler proje/ortam prefix'i ZORUNLU — multi-tenant veya multi-env çakışmasını önler
- TTL her varlık için ayrı tanımlanmalı; "hepsine 1 saat" yaklaşımı yok
- Tüm açıklamalar Türkçe, kod yorumları İngilizceBu ne işe yarar?
Redis önbellekleme stratejisi, veri yapısı tasarımı, TTL/invalidation, cache stampede önleme ve production deployment için çalışır kod üretin.
İlgili Promptlar
Python Veri Analizi için Claude Prompt'uDockerfile ve Docker Compose Dosyası Oluşturmak için Claude PromptuJWT Kimlik Doğrulama Sistemi için Claude prompt'uBirim test üretme ve kenar durum promptuGraphQL Şema ve Resolver Tasarımı için Claude PromptuKod Performans Analizi ve Optimizasyon Planı için Claude Promptu