Bir web sayfası ilk açılıştan sonra saniyeler içinde tekrar yüklendiğinde arkada çalışan şey çoğunlukla önbellektir (cache). Önbellek, sık istenen verinin kopyasını erişimi hızlı bir yerde tutarak aynı işi tekrar tekrar yapmaktan kaçınmanın yoludur. Bu rehber, önbelleğin ne olduğunu, hangi katmanlarda çalıştığını ve bir yayın altyapısında doğru kurulunca neyi hızlandırdığını adım adım anlatır.
İlgili içerikler: SEO uyumlu haber yazılımı rehberi · Hızlı veritabanı yapısı nasıl kurulur · Görsel optimizasyonu nasıl yapılır
Önbellek (Cache) Nedir?
Önbellek, hesaplanması veya getirilmesi pahalı olan bir verinin kopyasını, ona daha hızlı ulaşılabilecek geçici bir depoda saklama tekniğidir. Amaç basittir: aynı istek ikinci kez geldiğinde, yanıtı asıl kaynağa (veritabanı, disk, uzak sunucu) gitmeden doğrudan bu hızlı depodan vermektir.
Fikir, bilgisayarın her katmanında tekrar eder. İşlemci, ana bellekten daha hızlı olan küçük L1/L2/L3 önbelleklerini kullanır; işletim sistemi disk bloklarını RAM'de tutar; tarayıcı indirdiği dosyaları yerelde saklar; sunucu ise üretilen bir HTML sayfasını yeniden üretmek yerine hazır tutar. Altta yatan mantık her zaman aynıdır: bir kez üret, çok kez kullan.
Önbellek Neden Önemlidir?

Önbelleğin değeri tek bir cümleyle özetlenebilir: tekrarlanan işi ortadan kaldırır. Aynı veriyi her istekte yeniden hesaplamak ya da diskten getirmek yerine hazır bir kopyayı sunmak, sistemin üç temel kaynağını birden korur.
- Hız: Bellekten okuma, diske veya uzak bir veritabanına gitmekten çok daha kısa sürer; bu da kullanıcıya daha hızlı yanıt demektir.
- Ölçeklenebilirlik: İsteklerin büyük bölümü önbellekten karşılandığında, asıl kaynak aynı donanımla çok daha fazla trafik taşıyabilir.
- Maliyet: Daha az veritabanı sorgusu ve daha az kaynak sunucu isteği, daha az işlemci ve bant genişliği tüketimi anlamına gelir.
- Dayanıklılık: Ani trafik zirvelerinde önbellek bir tampon görevi görür ve asıl kaynağı aşırı yüklenmekten korur.
Önbellek Nasıl Çalışır? Hit ve Miss
Önbelleğin çalışması iki temel sonuca dayanır. Bir istek geldiğinde sistem önce önbelleğe bakar:
- Cache hit (isabet): İstenen veri önbellekte vardır ve hâlâ geçerlidir. Yanıt doğrudan buradan döner; asıl kaynağa hiç dokunulmaz. En hızlı yol budur.
- Cache miss (kaçırma): Veri önbellekte yoktur veya süresi dolmuştur. Sistem asıl kaynağa gider, veriyi getirir, kullanıcıya döner ve genellikle bir sonraki istek için önbelleğe de yazar.
Bir önbelleğin ne kadar işe yaradığını ölçen değere isabet oranı (hit ratio) denir: toplam istekler içinde önbellekten karşılanan isteklerin payı. İsabet oranı yükseldikçe asıl kaynağın üzerindeki yük azalır ve ortalama yanıt süresi kısalır.
Önbellek alanı sınırsız değildir. Dolduğunda, yer açmak için neyin atılacağına bir tahliye politikası (eviction policy) karar verir. En yaygın yaklaşımlar şunlardır:
| Politika | Kural | Ne zaman uygun |
|---|---|---|
| LRU | En uzun süredir kullanılmayan kaydı atar | Genel amaçlı; erişimde yakınlık varsa |
| LFU | En az sıklıkta erişilen kaydı atar | Belirli kayıtlar sürekli popülerse |
| FIFO | İlk giren ilk çıkar | Basit; erişim sıklığı önemsizse |
| TTL | Süresi dolunca kaydı geçersiz sayar | Verinin belirli süre sonra bayatlaması kabul edilebilirse |
Önbellek Katmanları
Tek bir web isteği, kullanıcı ile veritabanı arasında birden çok durakta önbelleklenebilir. Her katman farklı bir sorunu çözer; güçlü bir kurulum bunları birlikte kullanır.
| Katman | Nerede çalışır | Tipik kullanım |
|---|---|---|
| Tarayıcı önbelleği | Ziyaretçinin cihazında | Statik dosyalar: CSS, JS, görsel, font |
| CDN / kenar önbelleği | Kullanıcıya yakın dağıtık sunucularda | Statik varlıklar ve önbelleklenebilir sayfalar |
| Ters vekil (reverse proxy) | Uygulama sunucusunun önünde | Tam sayfa HTML önbelleği (Varnish, Nginx) |
| Uygulama / nesne önbelleği | Uygulamanın yanında (RAM'de) | Sorgu sonuçları, parçalar, oturum (Redis, Memcached) |
| Veritabanı önbelleği | Veritabanı motorunun içinde | Tampon havuzu, sorgu planı, sık okunan sayfalar |
Tarayıcı Önbelleği ve HTTP Başlıkları

Tarayıcı önbelleği, sunucunun gönderdiği HTTP yanıt başlıklarıyla yönetilir. Sunucu bu başlıklar aracılığıyla bir dosyanın ne kadar süre saklanabileceğini ve ne zaman yeniden doğrulanması gerektiğini bildirir. En önemli başlık Cache-Control'dur.
# 1 yil boyunca sakla, surum damgali statik dosyalar icin idealdir
Cache-Control: public, max-age=31536000, immutable
# Sakla ama her kullanimdan once sunucuya dogrula
Cache-Control: no-cache
# Hic saklama (hassas, kisiye ozel yanitlar)
Cache-Control: no-store
# Bayat kopyayi goster, arka planda yenile
Cache-Control: max-age=60, stale-while-revalidate=600Yaygın yönergelerin anlamı şudur:
| Yönerge | Anlamı |
|---|---|
| max-age=N | Kopya N saniye boyunca taze sayılır |
| s-maxage=N | Paylaşımlı önbellekler (CDN) için ayrı bir ömür |
| public | Herkes tarafından önbelleklenebilir |
| private | Yalnızca tarayıcı saklar, paylaşımlı önbellekler saklamaz |
| no-cache | Saklanır ama kullanımdan önce yeniden doğrulanır |
| no-store | Hiçbir yerde saklanmaz |
| immutable | Süresi dolana kadar yeniden doğrulama yapma |
Bir kopyanın hâlâ geçerli olup olmadığını denetlemek için sunucu doğrulayıcılar da gönderir: ETag (içeriğin parmak izi) ve Last-Modified (son değişiklik tarihi). Bir sonraki istekte tarayıcı bunları If-None-Match veya If-Modified-Since ile geri gönderir; içerik değişmediyse sunucu, gövde yerine kısa bir 304 Not Modified döner ve bant genişliğinden tasarruf edilir.
CDN ve Kenar Önbelleği
CDN (Content Delivery Network), içeriğin kopyalarını coğrafi olarak dağıtılmış sunuculara yayan bir ağdır. Ziyaretçi, yanıtı kaynak sunucu yerine kendisine en yakın kenar (edge) noktasından alır. Bu, hem gecikmeyi (latency) düşürür hem de kaynak üzerindeki yükü azaltır.
CDN'ler s-maxage ve Cache-Control başlıklarına göre davranır. Statik varlıklar (görsel, CSS, JS) için CDN idealdir. Önbelleklenmiş kopyaları elle güncellemeniz gerektiğinde CDN'in temizleme (purge) özelliğini kullanırsınız. Görselleri boyut ve biçim açısından da hafifletmek için görsel optimizasyonu rehberimize göz atabilirsiniz.
Uygulama ve Nesne Önbelleği
Sunucu tarafında nesne önbellekleri, tekrar tekrar hesaplanan verileri bellekte tutar. En bilinen ikisi Redis ve Memcached'dir; her ikisi de veriyi RAM'de anahtar-değer çiftleri olarak saklar ve disk yerine bellekten okudukları için çok hızlı yanıt verir.
En yaygın desen cache-aside (yanına önbellek) desenidir: uygulama önce önbelleğe bakar, veri orada yoksa asıl kaynaktan alır ve sonraki istekler için önbelleğe yazar.
def haber_getir(haber_id):
anahtar = f"haber:{haber_id}"
veri = cache.get(anahtar) # 1) once onbellege bak
if veri is not None:
return veri # cache hit
veri = db.sorgu(haber_id) # 2) cache miss -> asil kaynak
cache.set(anahtar, veri, ttl=300) # 3) 5 dk sakla
return veriNesne önbelleği özellikle veritabanı yükünü azaltmakta etkilidir. Aynı sorguyu binlerce kez çalıştırmak yerine sonucu bir süre saklamak, hem veritabanını rahatlatır hem de yanıtı hızlandırır. Veritabanı katmanını en baştan hızlı tasarlamak için hızlı veritabanı yapısı rehberimiz tamamlayıcı bir kaynaktır.
Veritabanı Önbelleği
Veritabanı motorlarının kendi önbellek mekanizmaları vardır. En önemlisi tampon havuzudur (buffer pool / buffer cache): sık okunan veri ve indeks sayfaları RAM'de tutulur, böylece motorun diske gitme ihtiyacı azalır. Ayrıca sorgu planları ve hazır ifadeler de önbelleklenerek aynı sorgunun yeniden çözümlenmesi önlenir.
Önbellek Geçersiz Kılma (Invalidation)

Önbelleğin en zor kısmı, bir kopyanın ne zaman bayatladığına karar vermektir. Asıl veri değişir ama eski kopya servis edilmeye devam ederse, kullanıcı güncel olmayan içerik görür. Bunu çözmenin başlıca yolları şunlardır:
- Süre temelli (TTL): Her kopyaya bir ömür verilir ve süre dolunca otomatik olarak geçersiz olur. Basittir ama güncelleme ile güncellemenin görünür olması arasında bir gecikme bırakır.
- Olay temelli temizleme: Veri değiştiğinde (örneğin bir haber güncellenince) ilgili anahtar elle silinir veya yenilenir. Daha tazedir ama daha fazla kod gerektirir.
- Sürüm damgalama (cache busting): Dosya adına bir içerik özeti eklenir (örneğin
style.a1b2c3.css); içerik değişince URL de değişir ve tarayıcı yeni dosyayı indirir.
Haber Sitelerinde Önbellek Stratejisi
Haber siteleri önbellek açısından özel bir durumdur: trafik aniden zirve yapar (bir haber viral olduğunda), içerik çoğunlukla okunur ama nadiren değişir ve bir manşet dakikalar içinde güncellenebilir. Dengeli bir strateji şu unsurları birleştirir:
- Statik varlıklar (görsel, CSS, JS) için sürüm damgalamayla birlikte uzun ömürlü tarayıcı ve CDN önbelleği.
- Nadiren değişen sayfalar (kategori, arşiv) için kısa ömürlü tam sayfa önbelleği.
- Ana sayfa ve manşetler gibi hızlı değişen alanlar için çok kısa TTL veya olay temelli temizleme.
- Kişiye özel bölümler (giriş yapmış kullanıcılar, yorum formları) için önbelleği devre dışı bırakma veya kenarda parça birleştirme.
Ana sayfada tazelik, iç sayfalarda ise hız önceliklidir. Bir manşetin bir dakika gecikmeyle güncellenmesi genellikle kabul edilebilir; bunu, her istekte tüm sayfayı yeniden üretmenin maliyetiyle karşılaştırın.
Yaygın Önbellek Hataları
- Kişiye özel veriyi paylaşımlı önbelleğe koymak: Bir kullanıcının oturumu başkasına servis edilebilir. Bu tür yanıtlarda
privateveyano-storekullanın. - Sürüm damgalamadan uzun max-age vermek: Bir dosyaya bir yıllık ömür verip adını hiç değiştirmezseniz, güncellemeleriniz kullanıcılara ulaşmaz.
- Geçersiz kılmayı unutmak: İçerik değişir ama önbellek eski kopyayı servis etmeyi sürdürür.
- Her şeyi önbelleklemek: Nadiren istenen ya da sürekli değişen veriyi önbelleklemek belleği israf eder ve isabet oranını düşürür.
Sıkça Sorulan Sorular
Önbellek ile CDN aynı şey mi?
Hayır. Önbellek genel bir kavramdır; CDN ise bu kavramı coğrafi olarak dağıtılmış sunucular üzerinde uygulayan bir hizmettir. CDN bir tür önbellek katmanıdır ama tek önbellek türü değildir.
Önbellek süresini ne kadar vermeliyim?
Bu, verinin ne sıklıkta değiştiğine bağlıdır. Sürüm damgalı statik dosyalara çok uzun bir ömür verebilirsiniz. Sık değişen içeriğe kısa bir TTL verin veya olay temelli temizleme kullanın. Tek bir doğru sayı yoktur; tazelik ile hız arasındaki dengeye siz karar verirsiniz.
no-cache önbelleklemeyi gerçekten kapatır mı?
Hayır; isim yanıltıcıdır. no-cache, kopyanın saklanmasına izin verir ama her kullanımdan önce sunucuyla yeniden doğrulamayı zorunlu kılar. Gerçekten hiçbir yerde saklanmasını istemediğiniz veri için no-store kullanın.
Redis ile Memcached arasındaki fark nedir?
İkisi de bellekte çalışan hızlı anahtar-değer depolarıdır. Memcached daha yalındır ve basit önbellek senaryolarına odaklanır; Redis ise liste, küme ve sıralı küme gibi zengin veri yapıları, kalıcılık seçenekleri ve yayınla-abone ol gibi ek özellikler sunar. Yalnızca basit bir önbellek yeterliyse ikisi de iş görür; daha fazla veri yapısına ihtiyacınız varsa Redis daha esnektir.
Önbellek verisi RAM'den kaybolursa ne olur?
Önbellek yalnızca kopya tuttuğu için hiçbir veri kaybı olmaz. Sunucu yeniden başlatılır veya önbellek temizlenirse, gelen ilk istekler cache miss olur ve önbellek asıl kaynaktan yeniden doldurulur. Sistem kısa bir süre yavaş çalışabilir; buna genellikle önbelleğin "ısınması" denir.