post-images/daily-vs-hourly-cache/cover.jpg

Günlük vs Saatlik Cache

Merhabalar, son zamanlarda sıklıkla karşılaştığım bir problemle karşındayım. Pek çok insana da arkasında yatan mantığı anlatıp kendilerinin “aa evet haklısın” demesini sağladığım bu problem cache ttl’e (önbellek yaşam süresi) denk geliyor.

Bir servisin cachelenebileceği/cachelenemeyeceği konusunu ve cache’li /cache’siz işlem sonunda meydana gelebilecek sorunları detaylı inceliyoruz. Fakat ne kadar süreyle saklanılacağı genellikle önceden alışılagelmiş bir tarih atamasıyla atanıp geçiştiriliyor. Belki de “cacheleyelim de ne kadar olduğu önemli değil” diye düşünülüyordur 🤔. Bu bence oldukça yanlış bir düşünce. Neden mi? Bir örnekle açıklayalım.

Farz edelim ki; bir adet servisim var (ne iş yaptığı da bizim için pek önemli değil). Bu servis teoride günlük sonsuz istek almaya açık ve her isteği karşılayabilir öyle değil mi? Yani, sınırı olmayan dipsiz bir kuyu gibi duruyor. Peki ben bu servisi cacheleyebiliyor olsaydım? Örneğin; 1 saniyelik ufacık bir cache kullanıyor olsaydım ne değişirdi?

1 Gün = 24 Saat = 1440 Dakika = 86400 Saniye

Şöyle ki, günlük düşünürsek, servisim sonsuz sayıda olabilecek istek sayısını 86400 adet isteğe indirgeyecekti.

  • 1 dakikada 1440,
  • 5 dakikada 288,
  • 10 dakikada 144,
  • 1 saatlik cachede ise servisim sadece 24 istek alıyor olcaktı.

“Evet Emre bunu bende hesaplayabilirdim çok atla deve değil” diyebilirsin, evet öyle de zaten. Fakat nedense pek çok geliştirici arkadaşımın atladığı konu tam olarak şu;

Bir günlük cache koyalım, günde bir kere çağrılıp cachelensin. Buradaki veriler zaten pek değişmez.

Peki anlık bir durumda, beklenmedik bir olayda değişirse ne olacak? Cache’in evict olmasını bir gün bekleyecek misin? Eğer yazılmışsa, production ortamında evict metodunu mu çağıracaksın? Tam olarak bahsettiğim olay da bu, günde 1 kere cachelemekle (günlük cache), günde 24 kere cachelemek (saatlik cache) arasında sadece 23 adet istek var. Sence bu riski 23 istek için almaya değer mi?

Ne kadar sürede bu cache’i sıfırlamak isteyeceğin ve bu süreyi belirlerken ne kazanıp ne kaybettiğini iyi tartmam gerekiyor. Servise fazla istek gelmesin derken kullanıcının yanlış verilerle karşılaştığını görmek istemezsin.

CacheGünlük CacheSaatlik CacheCache TTLFarkındalıkÖnbellekÖnbelleğe Alma