0Pricing
FastAPI Backend Development Bootcamp · Ders

Redis ile Önbellekleme Stratejileri

Performansı artırmak için API yanıtlarını ve sık erişilen verileri önbelleğe almak üzere Redis'i entegre edin.

Redis ile Önbellekleme Stratejileri, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, FastAPI Backend Development Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.

Why Caching Matters

Uygulamanızın aynı verileri yavaş bir veritabanından veya harici bir servisten sürekli tekrar tekrar çektiğini hayal edin. Bu durum kullanıcılarınız için her şeyi yavaşlatır!

Önbelleğe alma (Caching), sık erişilen verileri daha hızlı ve geçici bir konumda saklama işlemidir. Bu, bilgiler için hızlı erişim sağlayan bir kısayolunuzun olması gibidir.

  • Yanıt sürelerini hızlandırır: Kullanıcılar verilere daha hızlı ulaşır.
  • Yükü azaltır: Veritabanlarınız ve API'leriniz üzerindeki baskıyı hafifletir.
  • Performansı artırır: Uygulamanız daha seri çalışır ve daha fazla kullanıcıyı kaldırabilir.

Meet Redis: A Fast Cache

Redis (Remote Dictionary Server), açık kaynaklı, bellek içi bir veri deposudur. Bellek içi olması, verileri RAM'de tuttuğu ve bu sayede inanılmaz derecede hızlı çalıştığı anlamına gelir!

Sadece basit anahtar-değer çiftlerini değil; dizeler, özetler, listeler ve kümeler gibi çeşitli veri türlerini desteklediği için genellikle 'veri yapısı deposu' olarak adlandırılır.

FastAPI'da önbelleğe alma için Redis, API yanıtlarını depolamak için mükemmel olan, ışık hızında bir anahtar-değer deposu görevi görür.

How Redis Caching Works

Bir FastAPI uç noktası veriye ihtiyaç duyduğunda, önce Redis'i kontrol eder.

  • Önbellek İsabeti (Cache Hit): Veri Redis'te bulunursa, hemen döndürülür. Bu son derece hızlıdır!
  • Önbellek Iskalama (Cache Miss): Veri Redis'te bulunmazsa, FastAPI veriyi orijinal kaynağından (örneğin, bir veritabanından) alır. Döndürmeden önce, sonraki istekler için bir kopyasını Redis'e kaydeder.

Bu strateji, aynı veriye yönelik sonraki isteklerin önbelleğin hızından yararlanmasını sağlar.

Connecting FastAPI to Redis

Python ile Redis kullanmak için redis-py kütüphanesinden (özellikle onun asenkron versiyonu olan redis.asyncio'dan) yararlanacağız. Öncelikle kütüphaneyi yükleyin: pip install redis.

Ardından, Redis sunucunuza bir bağlantı kurun. Bu bağlantıyı FastAPI uygulamanıza bir bağımlılık olarak enjekte edebilirsiniz.

İşte temel bir asenkron Redis istemcisi oluşturmanın ve bağlantıyı test etmenin yolu:

import redis.asyncio as redis
import asyncio

async def connect_to_redis():
    # Connect to Redis server (default host/port)
    r = redis.Redis(host='localhost', port=6377, db=0, decode_responses=True)
    try:
        # Ping to check connection
        await r.ping()
        print("Successfully connected to Redis!")
    except redis.exceptions.ConnectionError as e:
        print(f"Could not connect to Redis: {e}")
    finally:
        # Close the connection when done
        await r.close()

if __name__ == "__main__":
    # Run the async function
    asyncio.run(connect_to_redis())

Basic SET and GET Operations

Redis bir anahtar-değer deposudur. Benzersiz bir anahtarla ilişkili bir değer depolamak için SET, onu geri almak için ise GET kullanırsınız.

İstemci kurulumundaki decode_responses=True parametresi, alınan baytların otomatik olarak Python dizelerine dönüştürülmesini sağlar.

Bir dizenin depolanması ve getirilmesine dair basit bir örnek görelim:

import redis.asyncio as redis
import asyncio

async def basic_cache_example():
    r = redis.Redis(host='localhost', port=6377, db=0, decode_responses=True)
    key = "app:greeting"
    value = "Hello from your Redis cache!"

    # Store a value with a key
    await r.set(key, value)
    print(f"Set key '{key}' with value: '{value}'")

    # Retrieve the value using its key
    cached_value = await r.get(key)
    print(f"Retrieved value for '{key}': '{cached_value}'")

    await r.close()

if __name__ == "__main__":
    asyncio.run(basic_cache_example())

Caching Complex Data (JSON)

API yanıtları genellikle Python sözlükleri gibi karmaşık veri yapılarıdır ve bunlar daha sonra JSON'a serileştirilir. Redis, dize (string) değerlerini saklar.

Bir sözlüğü önbelleğe almak için, öncelikle Python'un yerleşik json modülünü kullanarak onu bir JSON dizisine dönüştürürüz. Geri alırken ise JSON dizisini tekrar bir sözlüğe ayrıştırırız.

Bu, zengin veri nesnelerini verimli bir şekilde önbelleğe almamızı sağlar.

import redis.asyncio as redis
import asyncio
import json

async def cache_json_object_example():
    r = redis.Redis(host='localhost', port=6377, db=0, decode_responses=True)
    
    user_id = "user_456"
    user_profile = {"name": "Alice", "email": "alice@example.com", "age": 30}
    
    # Convert Python dict to JSON string
    json_profile = json.dumps(user_profile)
    
    # Store the JSON string in Redis
    await r.set(f"user:{user_id}", json_profile)
    print(f"Cached user profile for {user_id}")
    
    # Retrieve the JSON string from Redis
    cached_json = await r.get(f"user:{user_id}")
    if cached_json:
        # Convert JSON string back to Python dict
        retrieved_profile = json.loads(cached_json)
        print(f"Retrieved user name: {retrieved_profile['name']}")
    
    await r.close()

if __name__ == "__main__":
    asyncio.run(cache_json_object_example())

Managing Cache Expiry (TTL)

Veritabanındaki orijinal veriler değişirse, önbelleğe alınmış veriler 'eskiyebilir'. Eski verileri sunmak, hiç önbellek kullanmamaktan daha kötü olabilir!

Yaşam Süresi (TTL) çok önemli bir kavramdır. Önbelleğe alınmış bir öğenin Redis'ten otomatik olarak kaldırılacağı süreyi (saniye cinsinden) ifade eder.

TTL kullanmak, önbelleğinizin güncel kalmasını sağlar ve manuel müdahaleye gerek kalmadan eski bilgileri sunmanızı engeller.

Caching with TTL in FastAPI

Redis'te SET komutunu kullanırken, saniye cinsinden (veya milisaniye için px kullanarak) son kullanma süresini belirlemek için bir ex parametresi ekleyebilirsiniz.

Bu örnek, bir öğeyi 60 saniye boyunca önbelleğe alan bir FastAPI uç noktasını göstermektedir. Aynı öğeyi 60 saniye içinde tekrar isterseniz, önbellekten sunulur; aksi takdirde, (simüle edilmiş) veritabanından tekrar getirilir.

from fastapi import FastAPI, Depends
import redis.asyncio as redis
import asyncio
import json

app = FastAPI()

# Dependency to get a Redis client instance
async def get_redis_client():
    r = redis.Redis(host='localhost', port=6377, db=0, decode_responses=True)
    try:
        yield r # Provide the client
    finally:
        await r.close() # Ensure client is closed after request

@app.get("/products/{product_id}")
async def read_product(product_id: str, redis_client: redis.Redis = Depends(get_redis_client)):
    cache_key = f"product:{product_id}"
    
    # 1. Try to get data from cache
    cached_data = await redis_client.get(cache_key)
    if cached_data:
        print(f"Cache hit for {product_id}!")
        return json.loads(cached_data)
    
    # 2. If not in cache, simulate fetching from database
    print(f"Cache miss for {product_id}. Fetching from DB...")
    await asyncio.sleep(1) # Simulate I/O delay for DB call
    product_data = {"id": product_id, "name": f"Product {product_id}", "price": 99.99}
    
    # 3. Store in cache with 60-second TTL
    await redis_client.set(cache_key, json.dumps(product_data), ex=60)
    
    return product_data

# To run this example:
# 1. Ensure a Redis server is running (e.g., `redis-server` in your terminal).
# 2. Save this code as `main.py`.
# 3. Run Uvicorn: `uvicorn main:app --reload`.
# 4. Access in your browser: `http://127.0.0.1:8000/products/123`.
#    Refresh the page to see 'Cache hit' messages after the first request.

Cache Invalidation & Considerations

TTL otomatik süre dolumunu yönetse de, bazen kaynak verisi TTL dolmadan değiştiği için bir öğeyi önbellekten manuel olarak kaldırmanız gerekebilir.

Buna önbellek geçersiz kılma (cache invalidation) denir. Örneğin, bir kullanıcı profilini güncellerse, redis_client.delete(key) kullanarak eski profil verilerini önbellekten açıkça silmeniz gerekir.

Önbellekleme için dikkat edilmesi gerekenler:

  • Veri Değişkenliği: Her saniye değişen yüksek dinamikliğe sahip verileri önbelleğe almayın.
  • Bellek Kullanımı: Redis verileri RAM'de saklar, bu nedenle sunucunuzun bellek kapasitesine dikkat edin.
  • Tutarlılık: Güncellik ve performans arasında bir denge kurun.

Quick Check

Redis'i ve temel önbelleğe alma stratejilerinin nasıl uygulanacağını öğrendiniz. Şimdi sağladığı avantajlara dair anlayışınızı test edelim.

Recap: Caching for Performance

Harika bir iş çıkardınız! Redis'in FastAPI uygulamanızın performansını ve ölçeklenebilirliğini nasıl önemli ölçüde artırabileceğini başarıyla keşfettiniz.

İşte ele aldıklarımızın kısa bir özeti:

  • Önbelleğe Alma (Caching) Nedir: Daha hızlı erişim için verileri geçici olarak depolamak.
  • Redis ile Tanışma: Hızlı, bellek içi bir anahtar-değer (key-value) deposu.
  • Redis'e Bağlanma: İstemci bağlantısı için redis.asyncio kullanımı.
  • Temel İşlemler: Dizeleri ve JSON verilerini önbelleğe almak için SET ve GET.
  • Yaşam Süresi (TTL): ex parametresi ile önbelleğe alınan verilerin süresini otomatik olarak doldurmak.
  • Geçersiz Kılma (Invalidation): Güncelliğini yitirmiş verileri manuel olarak kaldırmak.

Bundan sonra, gerçek zamanlı güncellemeler için Pub/Sub gibi daha gelişmiş Redis özelliklerini veya daha yapılandırılmış önbelleğe alınmış veriler için Redis Hash'lerini keşfedebilirsiniz.

Sıkça Sorulan Sorular

“Redis ile Önbellekleme Stratejileri” dersi ücretsiz mi?

Evet — “Redis ile Önbellekleme Stratejileri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve FastAPI Backend Development Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.

“Redis ile Önbellekleme Stratejileri” dersinde ne öğreneceğim?

Performansı artırmak için API yanıtlarını ve sık erişilen verileri önbelleğe almak üzere Redis'i entegre edin. FastAPI Backend Development Bootcamp ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

FastAPI Backend Development Bootcamp öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te FastAPI Backend Development Bootcamp, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Redis ile Önbellekleme Stratejileri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu FastAPI Backend Development Bootcamp dersinde kod yazıp çalıştırabilir miyim?

Evet. Her FastAPI Backend Development Bootcamp dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Redis ile Önbellekleme Stratejileri
  2. Eşzamansız Veritabanı Erişimi
  3. Yük Dengeleme ve İzleme
  4. Arka Plan Görevleri ve İş Kuyrukları
← FastAPI Backend Development Bootcamp Sayfasına Dön