Bir web sayfası her istekte sıfırdan oluşturulmak zorunda değildir. Daha önce üretilmiş bir yanıtın veya sık kullanılan verinin geçici bir kopyasını saklayan cache mekanizması, sonraki istekleri daha kısa sürede karşılamaya yardımcı olur. Türkçede önbellek olarak da adlandırılan bu yapı; ziyaretçinin tarayıcısından CDN noktalarına, web sunucusundan uygulama ve veritabanına kadar birden fazla katmanda çalışabilir.
Cache doğru yapılandırıldığında sunucu yükünü ve yanıt süresini azaltabilir. Yanlış yapılandırıldığında ise ziyaretçiye güncelliğini yitirmiş sayfalar gösterebilir, oturum ve sepet gibi kişisel alanlarda hatalara neden olabilir. Bu nedenle “cache açmak” tek başına bir optimizasyon değildir; hangi içeriğin, hangi katmanda, ne kadar süreyle saklanacağının belirlenmesi gerekir.
Cache nedir?
Cache, oluşturulması veya kaynaktan alınması zaman alan bir verinin daha hızlı erişilebilen geçici bir kopyasıdır. Bir ziyaretçi aynı dosyayı ya da aynı sayfayı yeniden istediğinde sistem, uygun ve geçerli bir kopya varsa asıl kaynağa kadar gitmeden bu kopyayı sunabilir. Böylece işlemci, disk, veritabanı ve ağ üzerindeki tekrar eden iş azalır.
Web altyapısında tek bir cache yoktur. Tarayıcı görsel ve stil dosyalarını yerel diskte tutabilir; CDN, statik dosyaları ziyaretçiye yakın bir noktada saklayabilir; web sunucusu hazır HTML yanıtlarını sunabilir; uygulama sık kullanılan nesneleri bellekte tutabilir. Bu katmanların her biri farklı bir sorunu çözer ve farklı temizleme kurallarına ihtiyaç duyar.
Cache kalıcı depolama veya yedekleme değildir. Süresi dolan ya da geçersiz kılınan bir cache kaydı yeniden üretilebilir. Bu nedenle önbellekte duran bir dosyanın varlığı, asıl dosya veya veritabanı için yedek alındığı anlamına gelmez.
Cache hit ve cache miss nedir?
İstenen içerik ilgili cache katmanında bulunuyor ve hâlâ geçerliyse buna cache hit denir. Sistem hazır kopyayı gönderdiği için genellikle daha az işlem yapar. İçerik bulunmuyorsa, süresi dolmuşsa veya isteğin koşulları saklanan kopyayla uyuşmuyorsa cache miss oluşur. Bu durumda istek bir sonraki katmana ya da asıl uygulamaya iletilir.
Cache miss her zaman hata değildir. İlk istek, yeni yayımlanan bir sayfa veya kişiselleştirilmiş bir yanıt doğal olarak miss üretebilir. Sorun, önbelleğe alınması beklenen popüler ve aynı içerikte sürekli miss görülmesidir. Bu durum düşük TTL, yanlış cache anahtarı, gereksiz çerez varyasyonları veya her istekte cache’i geçersiz kılan uygulama davranışından kaynaklanabilir.
Hit oranı tek başına başarı ölçütü olarak değerlendirilmemelidir. Örneğin kullanıcı hesabı ve ödeme sayfalarını önbelleğe almamak hit oranını düşürebilir; ancak veri doğruluğu ve güvenliği açısından doğru tercih budur. Hedef, mümkün olan en yüksek oran değil, güvenle tekrar kullanılabilen yanıtlar için sağlıklı bir oran elde etmektir.
Tarayıcı cache nasıl çalışır?
Tarayıcı cache, HTML, CSS, JavaScript, yazı tipi ve görsel gibi kaynakların bir kopyasını kullanıcının cihazında tutar. Sunucu; Cache-Control, Expires, ETag ve Last-Modified gibi HTTP başlıklarıyla tarayıcıya kaynağın saklanıp saklanamayacağını ve ne zaman yeniden doğrulanacağını bildirir.
Kaynağın kullanım süresi devam ediyorsa tarayıcı yerel kopyayı kullanabilir. Yeniden doğrulama gerektiğinde koşullu bir istek gönderir; dosya değişmemişse sunucu gövdeyi tekrar aktarmadan bunu bildirebilir. Dosya değişmişse yeni sürüm indirilir. Bu yaklaşım özellikle tekrar gelen ziyaretçilerde aktarılan veri miktarını azaltır.
Uzun süre saklanan statik dosyalarda dosya adı sürümlemek yararlıdır. Örneğin stil dosyasının içeriği değiştiğinde dosya adındaki sürüm veya içerik özeti de değiştirilirse eski dosya cache’te kalırken tarayıcı yeni adresi indirir. HTML belgelerinde ise daha kısa ve kontrollü süreler tercih edilebilir.
CDN cache nasıl çalışır?
CDN, içeriğin kopyalarını farklı coğrafi noktalardaki uç sunucularda tutar. Bir ziyaretçinin isteği uygun bir uç noktaya yönlendirilir; geçerli kopya varsa yanıt kaynak sunucuya ulaşmadan verilebilir. Bu yöntem özellikle görsel, video, CSS ve JavaScript gibi statik kaynaklarda gecikmeyi ve kaynak sunucu trafiğini azaltabilir.
Bir CDN’in hangi yanıtları saklayacağı; URL, sorgu parametresi, çerez, HTTP yöntemi, yanıt başlıkları ve tanımlanan kurallara bağlıdır. Cloudflare’ın önbellekleme yapısı gibi uç katman çözümlerinde, kaynak sunucudaki kurallarla CDN ayarlarının birbiriyle çelişmemesi önemlidir. Aksi hâlde bir katman temizlense bile diğer katman eski yanıtı sunmaya devam edebilir.
CDN cache ile sunucu cache aynı şey değildir. CDN kopyayı ağın uç noktasında saklarken sunucu cache, kaynak altyapının içinde çalışır. CDN’de miss oluştuğunda istek kaynak sunucuya gelir; kaynak sunucunun kendi cache’i varsa yanıt yine uygulamayı ve veritabanını çalıştırmadan üretilebilir.
TTL nasıl belirlenir?
TTL, bir cache kaydının yeniden doğrulanmadan veya süresi dolmadan ne kadar süre kullanılabileceğini belirler. Her içerik için tek bir ideal TTL yoktur. Değişme sıklığı, yanlış veya eski bilginin etkisi, cache temizleme yeteneği ve trafiğin yoğunluğu birlikte değerlendirilmelidir.
Logo, yazı tipi ve sürümlenmiş CSS dosyaları seyrek değiştiği için daha uzun süre saklanabilir. Haber akışı, stok durumu veya fiyat bilgisi gibi sık güncellenen veriler daha kısa TTL ya da olay temelli geçersiz kılma gerektirebilir. Güncelleme anında purge işlemi güvenilir biçimde tetiklenebiliyorsa bazı içeriklerde daha uzun TTL kullanılabilir.
TTL çok kısa tutulursa cache’in tekrar kullanım avantajı azalır ve kaynak sunucu daha sık çalışır. Çok uzun tutulursa güncellik sorunu büyür. Uygun süre önce kontrollü bir ortamda denenmeli; hit-miss oranları, kaynak tüketimi ve içerik güncelliği birlikte izlenmelidir.
Hangi içerikler cache dışında tutulmalıdır?
Kullanıcıya veya oturuma göre değişen sayfalar varsayılan olarak dikkatle ele alınmalıdır. Yönetim panelleri, hesap sayfaları, alışveriş sepeti, ödeme adımları, kişisel teklifler ve kimlik doğrulama yanıtları ortak bir cache üzerinden başka kullanıcılara sunulmamalıdır. Bu sayfalar için cache’i kapatmak veya kullanıcıya özel güvenli kurallar tanımlamak gerekir.
POST gibi veri değiştiren istekler, tek kullanımlık güvenlik belirteçleri içeren yanıtlar ve anlık doğruluk gerektiren API sonuçları da genel sayfa cache’i için uygun olmayabilir. Uygulamanın yalnızca herkese açık ve aynı yanıtı üreten bölümleri cache’lenebilir; kişisel parçalar ayrı isteklerle yüklenebilir.
Çerez bulunan her isteği otomatik olarak cache dışına çıkarmak güvenli ama verimsiz olabilir. Bunun yerine hangi çerezlerin gerçekten içeriği değiştirdiği belirlenmelidir. Aynı şekilde tüm sorgu parametrelerini farklı bir cache anahtarı yapmak, gereksiz sayıda kopya oluşturarak hit oranını düşürebilir.
Sunucu tarafı cache katmanları nelerdir?

Sunucu tarafında cache, web sunucusu ile uygulama ve veritabanı arasında farklı seviyelerde kurulabilir. Bazı çözümler hazır HTML yanıtı saklarken bazıları PHP tarafından kullanılan kodu veya uygulamanın sık istediği verileri bellekte tutar. LiteSpeed hosting altyapısı gibi web sunucusu tabanlı çözümler, doğru eklenti ve kurallarla tam sayfa cache’i uygulayabilir.
Web sunucusu ve ters proxy cache’i
Web sunucusu ya da önündeki ters proxy, belirli HTTP yanıtlarını uygulamaya iletmeden sunabilir. Bu katman yüksek trafikli, herkese aynı görünen sayfalarda etkili olabilir. Cache anahtarı; alan adı, yol, protokol, sorgu ve gerekli durumlarda belirli çerezlerden oluşturulmalıdır.
Uygulama ve nesne cache’i
Uygulama cache’i, hesaplanması maliyetli sonuçları veya sık kullanılan nesneleri bellekte saklar. Redis veya Memcached benzeri bir servis kullanılabilir; ancak kullanım biçimi uygulamanın desteğine bağlıdır. Yanlış anahtarlama ya da geçersiz kılma, eski verinin uzun süre kalmasına neden olabilir.
Opcode cache
PHP gibi çalışma zamanlarında opcode cache, kaynak kodun her istekte yeniden ayrıştırılıp derlenmesini azaltır. Bu katman HTML sayfa kopyası tutmaz; çalıştırmaya hazır kod temsillerini saklar. Bu nedenle sayfa cache’i ve object cache ile aynı amaçta değerlendirilmemelidir.
Page cache, object cache ve opcode cache arasındaki fark nedir?
Page cache, tamamlanmış HTML yanıtını saklar ve uygun istekte uygulamayı büyük ölçüde devre dışı bırakır. Object cache, uygulamanın kullandığı sorgu sonuçları, ayarlar veya hesaplanmış nesneler gibi daha küçük veri parçalarını saklar. Opcode cache ise uygulama kodunun çalıştırılmaya hazırlanma maliyetini azaltır.
Bu katmanlar birbirinin yerine geçmez. Page cache devre dışı bırakılması gereken dinamik bir sayfa, object cache ve opcode cache’ten yine yararlanabilir. Tam sayfa cache’i bulunan bir sayfanın ilk oluşturulması sırasında da object ve opcode katmanları kaynak tüketimini azaltabilir.
Veritabanının kendi buffer ve sorgu mekanizmaları da performansı etkiler; ancak her sorguyu ayrı bir uygulama cache’ine almak doğru değildir. Verinin güncellenme biçimi, tutarlılık gereksinimi ve cache invalidation yöntemi tasarımın parçası olmalıdır.
Cache ne zaman ve nasıl temizlenmelidir?

İçerik yayımlandığında, tema veya uygulama dosyaları değiştiğinde, kritik bir yapılandırma güncellendiğinde ya da ziyaretçiye eski veri sunulduğu doğrulandığında ilgili cache kayıtları temizlenebilir. Önce yalnız etkilenen URL veya anahtarları silmek, tüm cache’i bir anda boşaltmaktan daha kontrollüdür.
Katmanlar sırayla değerlendirilmelidir: uygulama veya eklenti cache’i, web sunucusu cache’i, CDN ve son olarak tarayıcı. DNS cache ayrı bir mekanizmadır; alan adının IP’ye çözümleme bilgisini tutar ve sayfa içeriği temizleme araçlarından etkilenmez. DNS değişikliklerinde kayıt TTL’si ve çözümleyici davranışı ayrıca incelenmelidir.
Cache temizlemek siteyi kalıcı olarak hızlandırmaz. Temizliğin hemen ardından kayıtların yeniden oluşması gerektiği için ilk istekler daha yavaş bile olabilir. Temizleme bir sorun giderme veya güncel içeriği yayma işlemidir; sürekli uygulanması, alttaki yanlış kuralı gizleyebilir.
Cache sorunları nasıl teşhis edilir?
Güncel olmayan içerik görüldüğünde önce sorunun herkeste mi, belirli bir oturumda mı ortaya çıktığı belirlenmelidir. Gizli pencere, farklı ağ ve farklı cihaz karşılaştırması tarayıcı cache’i ile ortak sunucu/CDN cache’ini ayırmaya yardımcı olur. URL’ye rastgele parametre eklemek bazı katmanları atlayabilir; ancak sonucu yorumlarken ilgili sistemin sorgu parametresi politikasını bilmek gerekir.
Tarayıcı geliştirici araçlarında yanıt başlıkları, yaş bilgisi ve cache durumu incelenebilir. CDN ya da web sunucusu kendine özgü hit-miss başlığı gönderiyorsa hangi katmanın yanıt verdiği anlaşılabilir. Uygulama logları ve kaynak sunucu erişim logları da isteğin gerçekten kaynağa ulaşıp ulaşmadığını gösterir.
Yanlış içeriği üreten katman belirlendikten sonra yalnız o katman temizlenmeli ve aynı istek yeniden test edilmelidir. Ardından cache anahtarı, TTL, çerez istisnaları ve purge tetikleyicileri gözden geçirilmelidir. Sorunu her seferinde toplu temizleme ile gidermek yerine tekrarlanmasını önleyen kural düzeltilmelidir.
Sonuç
Cache; tarayıcı, CDN, web sunucusu, uygulama, opcode ve veritabanı çevresinde birbirini tamamlayan katmanlardan oluşur. Doğru içerik doğru sürede saklandığında daha düşük yanıt süresi ve daha dengeli kaynak kullanımı sağlanabilir. Kişisel ve anlık veriler yanlış cache’lendiğinde ise performans kazancından daha büyük işlev ve güvenlik sorunları ortaya çıkabilir.
Sağlıklı yaklaşım, önce istek akışını haritalamak, her katmanın sorumluluğunu tanımlamak ve ölçüm yapmaktır. TTL, istisnalar ve temizleme mekanizması içerik türüne göre belirlenmeli; değişikliklerden sonra hem güncellik hem de hit-miss davranışı doğrulanmalıdır.
Cache hakkında sık sorulan sorular
Cache temizlemek siteyi hızlandırır mı?
Cache temizliği tek başına hız optimizasyonu değildir. Bozuk veya eski kayıtları kaldırarak belirli bir sorunu çözebilir; fakat kayıtlar yeniden oluşturulurken ilk istekler daha fazla işlem gerektirebilir. Kalıcı iyileştirme için yanlış TTL, cache anahtarı veya istisna kuralı düzeltilmelidir.
DNS cache ile web sayfası cache’i aynı mı?
Hayır. DNS cache, alan adının hangi IP adresine çözümlendiğini saklar. Web sayfası cache’i ise HTML veya statik dosya gibi içerikleri tutar. Birini temizlemek diğerini doğrudan temizlemez.
Dinamik bir site cache kullanabilir mi?
Evet. Herkese aynı sunulan sayfalar tam sayfa cache’inden yararlanabilir; kullanıcıya özel bölümler cache dışında bırakılabilir. Ayrıca tam sayfa cache’i uygun olmasa bile object cache ve opcode cache gibi katmanlar kullanılabilir.
Cache süresi ne kadar olmalıdır?
Sabit bir süre yoktur. Sürümlenmiş statik dosyalar daha uzun, sık değişen içerikler daha kısa süre saklanabilir. Güncellemenin etkisi, purge mekanizması ve trafik yapısı ölçülerek içerik türüne özel TTL belirlenmelidir.

