> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Önbellek Bileşeni

> Önbellek Bileşeni (Cache Component), Apinizer platformunda API Gateway performansını artırmak için önbellekleme işlevleri sağlayan bileşendir. Sık kullanılan verileri ve konfigürasyonları bellekte tutarak API Gateway'in yanıt süresini azaltır ve backend yükünü hafifletir. Local Cache ve Distributed Cache (Hazelcast) olmak üzere iki tür önbellek desteği sağlar. Throttling, quota gibi veriler distributed cache'de tutulur. Response cache hem local hem distributed olabilir; local olduğunda Hazelcast kullanılmaz.

## Önbellek Bileşeni Kavramı

<CardGroup cols={2}>
  <Card title="Performans Artışı" icon="gauge">
    Yanıt süresini azaltır
  </Card>

  <Card title="Backend Yükü" icon="server">
    Backend yükünü hafifletir
  </Card>

  <Card title="Yüksek Erişilebilirlik" icon="heart-pulse">
    Backend hatalarına karşı koruma
  </Card>

  <Card title="Maliyet Tasarrufu" icon="dollar-sign">
    Backend kaynak kullanımını azaltır
  </Card>
</CardGroup>

## Önbellek Bileşeni Türleri

### Local Cache

<AccordionGroup>
  <Accordion title="Konfigürasyon Cache">
    * API Proxy konfigürasyonları
    * Policy tanımları
    * Routing bilgileri
    * Metadata bilgileri
  </Accordion>

  <Accordion title="Token Cache">
    * OAuth2/JWT token'ları
    * Token validation sonuçları
    * User session bilgileri
  </Accordion>

  <Accordion title="Response Cache">
    * API response'ları
    * Cache key bazlı saklama
    * TTL (Time To Live) yönetimi
    * Local veya distributed olarak yapılandırılabilir

    <Tip>
      Response cache local olarak yapılandırıldığında Hazelcast kullanılmaz. Distributed olarak yapılandırıldığında Hazelcast kullanılır ve tüm API Gateway instance'ları arasında paylaşılır.
    </Tip>
  </Accordion>
</AccordionGroup>

### Distributed Cache (Hazelcast)

<CardGroup cols={2}>
  <Card title="Hazelcast" icon="network-wired">
    Distributed cache altyapısı

    * Multi-node support
    * High availability
    * Yönetim ve izleme Apinizer'da yapılabilir
    * Gateway pod'larından bağımsız namespace'lerde çalışabilir
  </Card>

  <Card title="Paylaşılan Durum" icon="users">
    Throttling, quota gibi veriler distributed tutulur

    * Throttling verileri
    * Quota verileri
    * Paylaşılan durum bilgileri
    * Cross-namespace erişim desteği
  </Card>

  <Card title="Response Cache" icon="arrows-rotate">
    Response cache hem local hem distributed olabilir

    * Local response cache: Hazelcast kullanılmaz
    * Distributed response cache: Hazelcast kullanılır
  </Card>

  <Card title="Cache Invalidation" icon="arrows-rotate">
    Otomatik ve event-based invalidation

    * Otomatik invalidation
    * Event-based invalidation
    * Pattern-based invalidation
  </Card>
</CardGroup>

<Info>
  Hazelcast, Apinizer tarafından yönetilir ve izlenebilir. Distributed cache kullanıldığında, throttling ve quota gibi veriler tüm API Gateway instance'ları arasında paylaşılır.

  **Namespace Bağımsızlığı:**

  Cache Server pod'ları artık Gateway pod'larından farklı Kubernetes namespace'lerinde çalışabilir. Gateway pod'ları diğer namespace'lerdeki cache sunucularına Kubernetes service discovery kullanarak erişebilir (örn: `http://cache-http-service.apinizer-cache.svc.cluster.local:8090`). Bu, daha esnek bir altyapı yönetimi sağlar ve Gateway ve Cache iş yüklerini ayırmanıza olanak tanır. Cache Server yapılandırması için [Dağıtık Cache](/tr/admin/server-management/dagitik-cache) sayfasına bakın.
</Info>

## Önbellek Stratejileri

<CardGroup cols={3}>
  <Card title="Cache-Aside (Lazy Loading)" icon="search">
    1. Cache'de ara
    2. Bulunamazsa backend'den al
    3. Cache'e kaydet
    4. İstemciye döndür
  </Card>

  <Card title="Write-Through" icon="arrow-right">
    1. Backend'e yaz
    2. Cache'e yaz
    3. İstemciye döndür
  </Card>

  <Card title="Write-Back (Write-Behind)" icon="clock">
    1. Cache'e yaz
    2. İstemciye döndür
    3. Asenkron olarak backend'e yaz
  </Card>
</CardGroup>

## Önbellek Yapılandırması

### Cache Key Stratejisi

<CardGroup cols={2}>
  <Card title="URL Bazlı" icon="link">
    URL path'i cache key olarak kullanılır

    Örnek: `GET /api/v1/products` → Cache Key: `/api/v1/products`
  </Card>

  <Card title="Query Parametreli" icon="code">
    URL ve query parametreleri cache key'e dahil edilir

    Örnek: `GET /api/v1/products?category=electronics` → Cache Key: `/api/v1/products?category=electronics`
  </Card>

  <Card title="Header Bazlı" icon="file-lines">
    URL ve belirli header değerleri cache key'e dahil edilir

    Cache Key: URL + Header değerleri
  </Card>

  <Card title="Custom Key" icon="key">
    Özel cache key oluşturma

    Kullanıcı tanımlı cache key stratejileri kullanılabilir.
  </Card>
</CardGroup>

### Cache TTL (Time To Live)

<AccordionGroup>
  <Accordion title="Sabit TTL">
    * Belirli bir süre için cache'de tutma
    * Örnek: 5 dakika, 1 saat
  </Accordion>

  <Accordion title="Dinamik TTL">
    * Response header'larına göre TTL
    * Cache-Control header'ı
    * Expires header'ı
  </Accordion>

  <Accordion title="Conditional TTL">
    * Koşullu TTL
    * Response status code'a göre
    * Content type'a göre
  </Accordion>
</AccordionGroup>

## Önbellek Invalidation

<CardGroup cols={2}>
  <Card title="TTL Expiry" icon="clock">
    * Zaman aşımı ile otomatik silme
  </Card>

  <Card title="Manual Invalidation" icon="trash">
    * Manuel cache temizleme
    * API üzerinden invalidation
  </Card>

  <Card title="Event-Based" icon="bell">
    * Event bazlı invalidation
    * Webhook ile invalidation
  </Card>

  <Card title="Pattern-Based" icon="filter">
    * Pattern bazlı invalidation
    * Wildcard invalidation
  </Card>
</CardGroup>

## Önbellek Kullanım Senaryoları

<CardGroup cols={3}>
  <Card title="Response Caching" icon="arrows-rotate">
    1. İlk istek: Backend'den al, cache'e kaydet
    2. Sonraki istekler: Cache'den döndür
    3. TTL sonrası: Cache'i temizle, tekrar backend'den al
  </Card>

  <Card title="Token Caching" icon="key">
    1. Token doğrulama: Token cache'de var mı kontrol et
    2. Cache'de varsa: Doğrulama yapmadan döndür
    3. Cache'de yoksa: Identity Manager'dan doğrula, cache'e kaydet
  </Card>

  <Card title="Configuration Caching" icon="gear">
    1. API Proxy konfigürasyonu: Management API'den al
    2. Local cache'e kaydet
    3. Konfigürasyon değişikliğinde: Cache'i invalidate et
  </Card>

  <Card title="Throttling ve Quota" icon="gauge">
    1. Throttling ve quota verileri distributed cache'de tutulur
    2. Tüm API Gateway instance'ları arasında paylaşılır (farklı namespace'lerde olsalar bile)
    3. Hazelcast üzerinden senkronize edilir
    4. Gateway pod'ları farklı namespace'lerdeki cache sunucularına Kubernetes service discovery ile erişir
  </Card>
</CardGroup>

## Önbellek Best Practices

<CardGroup cols={2}>
  <Card title="TTL Yönetimi" icon="clock">
    * Uygun TTL değerleri seçin
    * Çok kısa TTL performansı düşürür
    * Çok uzun TTL stale data riski
  </Card>

  <Card title="Cache Key Design" icon="key">
    * Anlamlı cache key'ler
    * Collision'ları önleyin
    * Pattern-based invalidation
  </Card>

  <Card title="Memory Management" icon="memory">
    * Cache size limitleri
    * Eviction policies
    * Memory monitoring
  </Card>

  <Card title="Error Handling" icon="triangle-exclamation">
    * Cache hatalarında fallback
    * Backend'e yönlendirme
    * Error logging
  </Card>
</CardGroup>

## Sonraki Adımlar

<CardGroup cols={2}>
  <Card title="Veri Log Katmanı" icon="database" href="/tr/concepts/mimari#5-veri-ve-log-katmanı">
    Veri Log Katmanı mimarisini öğrenin
  </Card>

  <Card title="API Gateway" icon="shield" href="/tr/concepts/temel-bilesenler/api-gateway">
    API Gateway bileşenini öğrenin
  </Card>
</CardGroup>
