Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Asp.NET Core 2.2 – Response Caching

Merhaba

Bu içeriğimizde, hem istemci hemde sunucu tarafında önbelleğe alma sorumluluğunu güden Response Caching middleware’ini inceleyeceğiz.

Response Caching ile önbelleğe alınmış olan endpointler yapılan ilk request neticesinden sonraki tüm requestlerde belirtilen süre çerçevesinde önbellekten cevaplandırılacaktır. Dolayısıyla ilgili endpointler yersiz istekler ile lüzumsuz yere meşgul edilmeyecek böylece uygulama sunucusu gereken işlemlere daha çok odaklanabilecek ve total maliyet minimize edilmiş olacaktır.

Response Caching middleware’ini uygulamada kullanabilmek için ilk olarak ilgili projeye “Startup.cs” dosyasındaki “ConfigureServices” metodu içerisinde “AddResponseCaching” fonksiyonuyla aşağıdaki gibi servis olarak dahil edilmesi gerekmektedir.

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
        }

Response Caching tanımlamasını yaparken aşağıdaki üç parametreyle ayarlarına müdahalede bulunabiliriz.

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching(_ =>
            {
                _.MaximumBodySize = 250;
                _.SizeLimit = 250;
                _.UseCaseSensitivePaths = false;
            });
        }

Ve ardından yine aynı dosya içerisindeki “Configure” metodu içerisinde de uygulamada kullanılabilir olarak “UseResponseCaching” fonksiyonu ile aşağıdaki gibi ayarlanmalıdır.

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseResponseCaching();
        }

Gerekli konfigürasyonları yaptıktan sonra cachelenmesini istediğimiz endpoint’te “ResponseCache” attributeu aracılığıyla aşağıdaki özellikleri kullanarak önbellekleme işlemi gerçekleştirilebilir.

Şimdi aşağıdaki örnek kod bloğunu inceleyiniz.

    public class HomeController : Controller
    {
        [ResponseCache(Duration = 130)]
        public IActionResult Index()
        {
            ViewBag.Now = DateTime.Now;
            return View();
        }
    }

Yukarıdaki örnekte, ResponseCache attribute’u ile “Index” metodunda ki Response datayı 130 saniyelik bir süreyle cachelemiş bulunmaktayız. Uygulama çalışırken “Index” metoduna yapılan ilk requestte döndürülen Response data CacheMiddleware’i tarafından 130 saniye boyunca Response Cache’de tutulacak. Bu 130 saniye boyunca hiçbir request “Index” metodunu tetiklemeyecek ve response olarak direkt olarak middleware tarafından cache üzerinden elde edilen data gönderilecektir..

Cache Profiles

Her bir önbellek ayarlaması yukarıdaki gibi tek tek endpoint merkezli yapılabileceği gibi “Startup.cs” dosyasından da aşağıdaki gibi uygulama ayağa kaldırılırken direkt olarak ayarlanabilir.

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
            services.AddMvc(_ =>
            {
                _.CacheProfiles.Add("Default_Cache_1", new CacheProfile()
                {
                    Duration = 50
                });
                _.CacheProfiles.Add("Default_Cache_2", new CacheProfile()
                {
                    Duration = 65
                });
            });
        }

Bu şekilde ayarlanan Cache Profile tanımlamaları endpointler üzerinde aşağıdaki gibi kullanılabilirler.

    public class HomeController : Controller
    {
        [ResponseCache(CacheProfileName = "Default_Cache_1")]
        public IActionResult Index()
        {
            ViewBag.Now = DateTime.Now;
            return View();
        }

        [ResponseCache(CacheProfileName = "Default_Cache_2")]
        public IActionResult Index2()
        {
            ViewBag.Now = DateTime.Now;
            return View();
        }
    }

İlgilenenlerin faydalanması dileğiyle…

Sonraki yazılarımızda görüşmek üzere…
İyi çalışmalar…

Exit mobile version