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.

  • MaximumBodySize : Response Body’ler için geçerli maksimum boyut. Varsayılan olarak 64 MB’tır.
  • SizeLimit : Response Cache’in maksimum ne kadar boyutta tutulacağını belirtiriz. Varsayılan olarak 100 MB değerine sahiptir.
  • UseCaseSensitivePaths : Path değerinin büyük ya da küçük harf duyarlığında olup olmamasını belirler.
        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.

  • Duration : Response’un saniye cinsinden ne kadar süre cache’de tutulacağını belirttiğimiz özelliktir.
  • Location : Cache’leme işleminin nerede yapılacağını belirttiğimiz özelliktir.
    • Any (Default)
    • Client :
    • None :
  • NoStore : Cache verisinin store edilip edilmeyeceği bilgisinin tutulduğu özelliktir. Bir başka deyişle sayfanın header bilgilerinde “no cache” bilgisinin gönderilip gönderilmeyeceğini belirler.
  • CacheProfileName : Cache profil ismini belirttiğimiz özelliktir. Makalenin ileriki satırlarında bu özelliğe atıfta bulunacağız.
  • VaryByHeader : Response header da yer alan Vary Key bilgisine göre önbellekleme işlemlerinin yapılmasını sağlar.
  • VaryByQueryKeys : Query String’te gelen parametreye göre hangi response’un cacheleneceği belirtilmektedir.

Ş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();
        }
    }

Asp.NET Core 2.2 - Response Caching

İlgilenenlerin faydalanması dileğiyle…

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

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.