Mobil Geliştirmede Önbellek Geçersiz Kılma: Stratejiler ve Mekanizmalar

Yazar: IT Sectr Yayınlanma: 2026-06-13 Okuma süresi: 9 dk

Önbellek geçersiz kılma — uygulama tarafından alınan bilgilerin güncelliğini sağlamak için önbellekteki eski verileri silme veya güncelleme sürecidir. Mobil geliştirmede, geçersiz kılma kritik öneme sahiptir: kullanıcı tam bir yeniden yükleme olmadan taze veri bekler. Google Developers, 2025'e göre, doğru yapılandırılmış geçersiz kılma ağ isteklerini %60 azaltır ve arayüz yanıt verebilirliğini iyileştirir.

Ana Noktalar

  • Önbellek geçersiz kılma — verileri eski olarak işaretleyen ve kaynaktan güncellenmesini tetikleyen bir mekanizmadır.
  • TTL — bir kaydın yaşam süresinin sabit bir aralıkla ayarlandığı en basit stratejidir.
  • Write-Through — veriler aynı anda önbelleğe ve kaynağa yazılır, tutarlılık sağlanır.
  • Write-Behind — kaynağa yazma ertelenir, performansı artırır ancak veri kaybı riski taşır.
  • Stale-While-Revalidate — önbellek arka planda güncellenirken kullanıcı eski verileri anında alır.

Önbellek geçersiz kılma nedir?

Önbellek geçersiz kılma, veri kaynağının mevcut durumuyla artık eşleşmeyen önbelleğe alınmış girişleri geçersiz kılma veya güncelleme sürecidir. Tüm önbelleği manuel olarak temizlemenin aksine, geçersiz kılma seçici olarak çalışır: yalnızca ilgisi sorgulanan veriler.

Önbellek, hızlı erişim için veri kopyalarını saklar. Zamanla, veritabanındaki veya sunucudaki orijinal veriler değişebilir — örneğin, bir kullanıcı profilini güncelledi veya akışta yeni bir gönderi göründü. Önbellek geçersiz kılınmazsa, uygulama eski bilgileri gösterir ve bu da mobil uygulamalarda işlem hatalarına, yanlış görüntülemeye ve güven kaybına yol açar.

Herhangi bir geçersiz kılmanın ana zorluğu, bilinen deyiştir: “There are only two hard things in Computer Science: cache invalidation and naming things”. Karmaşıklık, önbelleğe açıkça bildirilmediği sürece kaynağın ne zaman değiştiğini bilmemesi gerçeğinde yatar.

Martin Kleppmann'a göre (“Designing Data-Intensive Applications” (O'Reilly, 2017) kitabının yazarı), doğru geçersiz kılma, değişikliklerin merkezi bildirimini veya her okumada ilgiliyi kontrol eden bir mekanizmayı gerektirir — performans ve tutarlılık arasında bir ödünleşim.

kotlin
data class CacheEntryT(
    val data: T,
    val expiresAt: Long,
    val version: Int = 0
)

fun CacheT.isValid(key: String): Boolean =
    get(key)?.let { it.expiresAt > currentTimeMillis() && it.version == currentVersion(key) } ?: false

Bu kod basit bir yaklaşım gösterir: TTL süresi dolmamışsa ve sürüm kaynaktaki mevcut sürümle eşleşiyorsa önbellek girişi geçerli kabul edilir. Sürümleme mekanizması, eski verilerin görüntülenmesini önlemenin güvenilir yollarından biridir.

Mobil uygulamalarda neden geçersiz kılma gerekir

Veri tazeliği, çoğu mobil uygulama için temel bir gerekliliktir: sosyal ağlar, mesajlaşma uygulamaları, bankacılık hizmetleri, e-ticaret platformları. Yanlış hesap bakiyesi veya eski mesajlar gören bir kullanıcı, uygulamaya olan güvenini kaybeder.

Kullanıcı deneyiminin yanı sıra, geçersiz kılma trafik ve pil tasarrufu sağlar. Tüm verileri periyodik olarak yeniden yüklemek yerine, bir mobil uygulama yalnızca değiştirilen girişleri geçersiz kılabilir ve bunları seçici olarak yükleyebilir. Meta Engineering (2024)'e göre, Facebook Lite'da artımlı geçersiz kılmanın uygulanması, içerik tazeliğini kaybetmeden trafik tüketimini %35 azaltmıştır.

Bir diğer önemli husus da işlem tutarlılığıdır. Alışveriş sepeti veya rezervasyon sistemi olan uygulamalarda, eski önbellek kullanımı çift fatura veya veri çakışmalarına yol açabilir. Kritik işlemlerden sonra geçersiz kılma, bir sonraki isteğin taze veri okumasını garanti eder.

Önbellek geçersiz kılmanın ana stratejileri

TTL (Time-To-Live)

TTL en basit stratejidir; her önbellek girişine sabit bir yaşam süresi verilir. TTL süresi dolduğunda, veriler eski kabul edilir ve bir sonraki okumada kaldırılır. TTL, bir programa göre güncellenen veriler için idealdir — örneğin, hava durumu veya döviz kurları. Dezavantajı: veriler TTL aralığı içinde güncel olmayabilir.

Write-Through

Write-Through stratejisinde, her veri değişikliği önbellekten geçer: yazma işlemi aynı anda hem önbelleğe hem de kaynağa gerçekleştirilir. Bu, önbelleğin her zaman güncel sürümü içermesini sağlar. Dezavantajı, kaynak onaylayana kadar işlem tamamlanmadığı için artan yazma gecikmesidir. Write-Through, tutarlılık açısından kritik veriler için uygundur: hesap bakiyesi, sipariş durumu.

Write-Behind (Write-Back)

Write-Behind eşzamansız yazmadır: veriler hemen önbelleğe gider ve daha sonra ayrı bir işlemle kaynağa yazılır. Bu, yüksek yazma performansı sağlar ancak senkronizasyondan önce bir arıza durumunda veri kaybı riski taşır. Mobil uygulamalarda Write-Behind genellikle analitik, günlükler ve kritik olmayan kullanıcı eylemleri için kullanılır.

Write-Invalidate

Write-Invalidate — veri değiştiğinde önbelleği güncellemek yerine, ilgili girişi basitçe kaldırır (geçersiz kılar). Sonraki okuma bir önbellek hatası algılayacak ve kaynaktan taze veri yükleyecektir. Bu strateji uygulaması basittir ve okuma isteklerinin yazma isteklerinden önemli ölçüde fazla olduğu durumlarda iyi çalışır.

StratejiOkuma PerformansıYazma PerformansıTutarlılık
TTLYüksekYüksekZayıf (eski mümkün)
Write-ThroughYüksekOrtaGüçlü
Write-BehindYüksekYüksekZayıf (kayıp mümkün)
Write-InvalidateOrtaYüksekGüçlü (sonraki okumada)

Strateji seçimi, belirli bir senaryo için neyin daha önemli olduğuna bağlıdır: yanıt hızı, tutarlılık veya kaynak tasarrufu. Karma yaklaşımlar — örneğin, push bildirimi alındığında TTL ile Write-Invalidate — optimal bir denge sağlar.

Farklı önbellek seviyelerinde geçersiz kılma nasıl çalışır

HTTP önbelleği, istemci tarafındaki ilk seviyedir. Tarayıcı veya mobil uygulama, Cache-Control ve ETag başlıklarıyla sunucu yanıtlarını saklar. Geçersiz kılma, 304 Not Modified yanıtı alındığında veya max-age süresi dolduğunda gerçekleşir. ETag, istemcinin tam yanıtı indirmeden kaynağın güncelliğini kontrol etmesine olanak tanır.

Uygulama önbelleği, kod tarafından yönetilen ikinci seviyedir: bellek içi önbellekler (LRU, Android'de LruCache) veya disk önbellekleri (SQLite, Room, Realm). Buradaki geçersiz kılma geliştirici tarafından kontrol edilir. Android Developers (2025)'e göre, Flow ve tetikleyici tabanlı geçersiz kılma ile Room'un doğru kullanımı UI yeniden çizimlerini %40 azaltır.

Sunucu önbelleği üçüncü seviyedir: Redis, Memcached, CDN. Bu seviyede, geçersiz kılma TTL, DEL/PURGE komutları veya mesaj brokerları (RabbitMQ, Kafka) aracılığıyla yapılır. CDN geçersiz kılma ayrı bir zorluktur: CDN'nin dağıtık yapısı nedeniyle, bir temizleme komutunun küresel olarak yayılması dakikalar sürebilir. Cloudflare'e (2024) göre, Purge by URL ile geçersiz kılma, küresel yayılma için ortalama 5–15 saniye sürer.

Tüm seviyelerde geçersiz kılmayı koordine etmek için merkezi bir önbellek hizmeti veya olay brokerı kullanılır. Veriler değiştiğinde, kaynak bir olay yayınlar ve her seviye belirli anahtarları geçersiz kılma komutu alır. Bu, bir seviyenin verileri zaten güncellemişken diğerinin eski sürümü sunmaya devam etmesi durumunu önler.

Önbellek geçersiz kılmada yaygın hatalar

Çok uzun TTL en yaygın hatadır. Geliştiriciler TTL'yi marjlı ayarlar ve bu da kullanıcıların saatlerce veya günlerce eski veri görmesine neden olur. Çözüm: kısa TTL (1–5 dakika) ile başlayın ve yalnızca gerçek ihtiyacı ölçtükten sonra artırın.

Tek bir değişiklikte tüm önbelleği geçersiz kılma, mikrosit mimarisinde tipik bir sorundur. Bir kullanıcı avatarını günceller ve önbellek herkes için geçersiz kılınır. Çok sayıda kullanıcı olduğunda bu, Cache Stampede'e — kaynağa yönelik bir istek seli — neden olur. Çözüm: paylaşılan önbelleği değil, yalnızca belirli kullanıcının anahtarını geçersiz kılın.

Yazma hatalarında geçersiz kılma eksikliği — kaynağa yazma başarısız olursa ancak önbellek zaten güncellenmişse, uygulama tutarsız bir duruma düşer. Çözüm: iki aşamalı geçersiz kılma — önce önbelleği temizleyin, sonra kaynağa yazın ve hata durumunda geçersiz kılmayı geri alın.

Dağıtık yapıyı göz ardı etme — küme ortamında, bir düğümdeki geçersiz kılma diğer düğümlerin komutu aldığı anlamına gelmez. Olay brokerı olmadan, bazı sunucular eski veri sunmaya devam edecektir. Redis Pub/Sub veya Apache Kafka, geçersiz kılma olaylarını yayınlayarak bu sorunu çözer.

Geçersiz kılma stratejisi nasıl seçilir

Güncellik gereksinimlerini belirleyin — verilerin “hemen şimdi” güncel olması ne kadar kritik. Haber akışı için 1–2 dakikalık gecikme kabul edilebilir (TTL). Hesap bakiyesi için gecikme kabul edilemez (Write-Through).

Değişiklik sıklığını değerlendirin — günde bir kez güncellenen veriler (ürün kataloğu, şehir rehberi) TTL ile iyi çalışır. Saniyede onlarca kez değişen veriler (çevrimiçi durumlar, döviz kurları), WebSocket veya Firebase Cloud Messaging aracılığıyla push geçersiz kılma gerektirir.

Kaynak okuma maliyetini göz önünde bulundurun — kaynak 10 tabloda pahalı bir SQL sorgusu veya sınırlamaları olan harici bir API ise, uzun TTL ile agresif önbellekleme kullanın ancak eski verileri push geçersiz kılma ile telafi edin. Okuma ucuzsa (bellek içi arama), kısa TTL ve Write-Invalidate kullanın.

Google I/O (2025)'e göre, mobil uygulamalar için tipik desen Stale-While-Revalidate şeklindedir: kullanıcı önbelleğe alınmış verileri hemen görürken uygulama arka planda güncelliğini kontrol eder ve günceller. Bu, ödün vermeden yanıt hızı ve güncellik sağlar. stale-while-revalidate yönergesi içeren Cache-Control HTTP başlığı, Android 10 ve iOS 13'ten itibaren desteklenir.

Sıkça Sorulan Sorular

Geçersiz kılma ile önbellek temizleme arasındaki fark nedir?

Geçersiz kılma, belirli bir kaydı eski olarak işaretler ve bir sonraki okumada güncellenir. Önbellek temizleme, tüm girişlerin tamamen silinmesidir ki bu daha maliyetlidir ve uygulama performansını geçici olarak düşürebilir.

ETag ile geçersiz kılma nasıl çalışır?

ETag, sunucunun HTTP başlığında döndürdüğü bir kaynağın karması veya sürümüdür. Tekrarlanan istekte, istemci mevcut ETag ile If-None-Match gönderir. Kaynak değişmemişse, sunucu 304 Not Modified ile yanıt verir ve önbellek geçerli kalır.

En güvenilir geçersiz kılma stratejisi hangisidir?

Write-Through sürümleme ile en güvenilir olanıdır çünkü veriler her zaman tutarlıdır. Ancak en yüksek yazma gecikmesine sahiptir. Pratikte, performans ve güncellik dengesi için TTL push geçersiz kılma ile daha sık kullanılır.

Geçersiz kılma sırasında Cache Stampede'den nasıl kaçınılır?

Probabilistic Early Expiration kullanın — her istek, TTL süresi dolmadan önce rastgele önbellek güncelliğini kontrol eder. XFetch algoritması (Vattani, 2015), yeniden hesaplama olasılığını şu formülle hesaplar: p = (ttl - age) / (ttl * beta).

Mobil uygulamalarda önbellek geçersiz kılma nasıl test edilir?

Ağ hata ayıklama araçlarını kullanın: Charles Proxy, Proxyman veya Android Studio ve Xcode'da yerleşik Network Inspector. Verileri değiştirdikten sonra, bir sonraki isteğin önbelleğe alınmış sürümü döndürmek yerine gerçekten yeni sürümü yüklediğini doğrulayın.

Özet

  • Önbellek geçersiz kılma, okumada güncellik sağlamak için eski verileri silme veya güncelleme mekanizmasıdır.
  • TTL kayıt için sabit bir yaşam süresi belirler; basit ancak aralık içinde eski verilere izin verir.
  • Write-Through aynı anda önbelleğe ve kaynağa yazar, tam tutarlılık sağlar.
  • Write-Behind önbellek yazımından sonra kaynağa eşzamansız yazar; hızı artırır ancak kayıp riski taşır.
  • Stale-While-Revalidate arka planda güncellerken önbellek verilerini gösterir; Google tarafından mobil uygulamalar için önerilir.
  • Push geçersiz kılma (FCM veya WebSocket ile) yoklama olmadan istemcide önbelleği anında temizlemenin tek yoludur.
  • Strateji seçimi güncellik, performans ve kaynak okuma maliyeti arasında bir ödünleşimdir.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun