⚙️

Response Cache

Tenant Bazlı Aktif/Pasif Yönetimi

3 Farklı Yöntem ✅ Esnek Kontrol 📅 20 Aralık 2025

Problem

Response cache tüm tenant'lar için global olarak aktif/pasif yapılıyor. Bazı tenant'lar için cache açık, bazıları için kapalı olmasını istiyoruz.

Örnek Senaryo:
• Tenant 2 (ixtif.com) → Cache aktif (statik içerik, hızlı olmalı)
• Tenant 1001 (muzibu.com) → Cache pasif (dinamik içerik, gerçek zamanlı)

Yöntem 1: Settings Sistemi (ÖNERİLEN)

Önerilen

📝 Basit Anlatım (Herkes İçin):

Her tenant admin panelinden "Response Cache Aç/Kapa" butonu ile kontrol eder. Tıpkı "Dark Mode" açıp kapatmak gibi kolay. Tenant kendisi karar verir: "Ben hızlı olayım, cache açayım" veya "Dinamik içeriğim var, cache kapatayım" diye.

🔧 Nasıl Çalışır:

  1. Admin → Settings → Performance → "Response Cache Aktif" checkbox
  2. Database'de settings tablosuna kaydedilir
  3. TenantCacheProfile her istekte kontrol eder: setting('response_cache_enabled', true)
  4. Aktifse cache kullanır, değilse normal render eder

💻 Teknik Detaylar (Geliştiriciler İçin):

Dosya:

app/Services/TenantCacheProfile.php

Kod Değişikliği:

public function enabled(Request $request): bool
{
    // Global config kontrolü
    if (!config('responsecache.enabled', true)) {
        return false;
    }

    // Tenant bazlı kontrol
    return setting('response_cache_enabled', true);
}

Settings Key:

response_cache_enabled

✅ Artıları:

  • • Her tenant kendi karar verir
  • • Admin panelden yönetilebilir
  • • Anında aktif/pasif yapılabilir
  • • Test ortamında kolayca değiştirilebilir
  • • Kod deployment gerektirmez

❌ Eksileri:

  • • Her istekte settings sorgusu (ama cache'lenmiş olur)
  • • Admin panel'e settings sayfası eklemek gerekir

💎 Yöntem 2: Premium/Plan Kontrolü

📝 Basit Anlatım (Herkes İçin):

Sadece "premium" plan alan tenant'lar cache kullanabilir. Ücretsiz plan = cache yok (yavaş), premium plan = cache var (hızlı). Tıpkı Netflix'te "HD video" özelliğinin sadece premium üyelerde olması gibi. Tenant plan upgrade ederse otomatik olarak cache aktif olur.

🔧 Nasıl Çalışır:

  1. Tenant'ın subscription plan'ı kontrol edilir
  2. tenant()->is_premium veya tenant()->plan->has_cache kontrolü
  3. Premium ise cache kullanır, değilse kullanmaz
  4. Plan upgrade olunca otomatik aktif olur

💻 Teknik Detaylar (Geliştiriciler İçin):

Kod Değişikliği:

public function enabled(Request $request): bool
{
    if (!config('responsecache.enabled', true)) {
        return false;
    }

    // Premium kontrolü
    return tenant() && tenant()->is_premium;
}

Tenant Model:

is_premium attribute veya relation gerekir

✅ Artıları:

  • • Otomatik kontrol, elle açma/kapama yok
  • • Monetizasyon stratejisi (premium özellik)
  • • Plan upgrade olunca otomatik aktif
  • • Settings sayfası gerektirmez

❌ Eksileri:

  • • Tenant manuel kontrol edemez
  • • Premium olmayan tenant'lar hiç cache kullanamaz
  • • Test için plan değiştirmek gerekir

📋 Yöntem 3: Tenant ID Listesi (Manuel)

📝 Basit Anlatım (Herkes İçin):

Kod içinde "bu tenant'lar cache kullansın" diye liste tutulur. Sen manuel eklersin/çıkarırsın. Tıpkı "VIP listesi" gibi: Listede varsa cache kullanır, yoksa kullanmaz. Tam kontrol sende ama her değişiklik için kod güncelleme gerekir.

🔧 Nasıl Çalışır:

  1. Config dosyasında tenant ID listesi tutulur
  2. Her istekte tenant ID listede mi kontrol edilir
  3. Listede varsa cache kullanır
  4. Yeni tenant eklemek için kod güncellenir, deploy edilir

💻 Teknik Detaylar (Geliştiriciler İçin):

Config Dosyası:

config/cache-enabled-tenants.php

Config İçeriği:

return [
    2,    // ixtif.com
    5,    // example.com
    10,   // demo.com
];

Kod Değişikliği:

public function enabled(Request $request): bool
{
    if (!config('responsecache.enabled', true)) {
        return false;
    }

    $enabledTenants = config('cache-enabled-tenants', []);
    return tenant() && in_array(tenant()->id, $enabledTenants);
}

✅ Artıları:

  • • Tam kontrol sende
  • • Test ortamında kolayca değiştirebilirsin
  • • Basit implementasyon

❌ Eksileri:

  • • Tenant kendisi açamaz/kapatamaz
  • • Her değişiklik kod deployment gerektirir
  • • Ölçeklenebilir değil (100 tenant için zor)
  • • Admin panel'den yönetilemez

📊 Karşılaştırma Tablosu

Özellik Settings Sistemi Premium/Plan ID Listesi
Tenant kontrol ✅ Evet ❌ Hayır ❌ Hayır
Admin'den yönetim ✅ Evet ❌ Hayır ❌ Hayır
Anında değişiklik ✅ Evet ✅ Evet ❌ Deploy gerekir
Ölçeklenebilirlik ✅ Yüksek ✅ Yüksek ❌ Düşük
Monetizasyon ⚠️ Opsiyonel ✅ Doğrudan ❌ Yok
Kod karmaşıklığı ✅ Basit (2 satır) ⚠️ Orta ✅ Çok basit
Test kolaylığı ✅ Kolay ⚠️ Orta ✅ Kolay

🏆 Önerimiz

Yöntem 1: Settings Sistemi kullanmanı öneriyoruz.

💡 Neden?

  • Esneklik: Her tenant kendi karar verir, ihtiyacına göre açıp kapatır
  • Kolay Yönetim: Admin panelden tek tıkla aktif/pasif
  • Test Dostu: İstersen manuel kapat, performansı karşılaştır
  • Hızlı Implementasyon: 10 dakika, sadece 2 satır kod
  • Ölçeklenebilir: 1000 tenant olsa bile sorunsuz çalışır

💎 İkinci Seçenek: Premium/Plan Kontrolü

Eğer cache'i "premium özellik" olarak satmak istiyorsan, Yöntem 2'yi kullan. Monetizasyon stratejin varsa harika bir seçenek.

🚀 Hızlı Başlangıç (Settings Sistemi)

1

TenantCacheProfile Düzenle

app/Services/TenantCacheProfile.php

public function enabled(Request $request): bool
{
    // Global config kontrolü
    if (!config('responsecache.enabled', true)) {
        return false;
    }

    // Tenant bazlı kontrol (Settings'den)
    return setting('response_cache_enabled', true);
}
2

Test Et (Tinker)

php artisan tinker

// Cache aktif tenant için test
setting(['response_cache_enabled' => true]);

// Cache pasif tenant için test
setting(['response_cache_enabled' => false]);
3

Admin Panel Ayarı Ekle (Opsiyonel)

Settings sayfasına "Response Cache" checkbox ekle.

<input type="checkbox"
       name="response_cache_enabled"
       {{ setting('response_cache_enabled', true) ? 'checked' : '' }}>
<label>Response Cache Aktif</label>
4

Cache Temizle ve Test Et

php artisan config:cache
php artisan responsecache:clear

# Test et
curl -I https://ixtif.com/ | grep -i cache-control

🤖 Claude AI tarafından oluşturuldu • 20 Aralık 2025

Generated with Claude Code