.Net Core Eğitimleri

13- ) Cache Alt Yapısı

Cache İşlemleri

Bu derste projemize cache yeteneği ekleyeceğiz.  Sıklıkla değişikliğe uğramasını beklemediğimiz verileri cache de yani önbellekte hazır olarak tutabiliriz, bu bize performans kazandıran bir işlem olur ancak getirilerinin yanında götürüleri de tabiki olacaktır.

Cache birden fazla yöntemle birden fazla şekilde yapılabilir. Daha önceki yazılarımda da belirttiğim gibi, yazılım geliştirirken hangisi en iyi ya da hangisi tercih edilmeli soruları için mutlaka öncesinde bir strateji belirlenmeli ve ona göre seçim yapılmalı. Cache işlemi içinde bu durum geçerli.

Memory Cache (Server Side)

Sunucunun belleklerinde belirli bir süre için veri saklama işlemidir. Veriler belirtilen kurallara göre (ne kadar süreliğine, hangi anahtar ile .. vs) bellek üzerinde hazır olarak bekletilir. İstemciler bu verilere ulaşmak istediğinde, sistem öncelikle bellekte bu verilerin olup olmadığını kontrol eder ve yok ise ancak o zaman veritabanı ya da fiziki veri saklama alanına gider.

Verilerin hazır olarak bekletilmesi bize doğru kurgulandığında ciddi performans kazancı sağlayacaktır, hem istemciler ile sunucu arasında trafik rahatlayacak hemde iç sistemler arası trafik azalacaktır. Ancak gereksiz yere çok büyük verilerin bellek üzerinde tutulması, sunucu kaynaklarının aşırı kullanılması sebebi ile geç yanıt vermelere ve hatta kilitlenmelere neden olabilir. Artılar ve eksiler göz önünde bulundurulmalı, uygulamanın koşacağı sunucu iyi seçilmeli ve aynı sunucuda başka uygulamalar koşacak ise bu uygulamalarında davranışsal özellikleri iyi anlaşılmalıdır.

Response Cache

Memory cache yönteminden farklı olarak bu yöntemde bir middleware görev yapar ve eğer son response’un httpstatus’u 200 yani başarılı ise ve veriler belirtilen özelliklere göre cachelenmiş ise, uygulamadaki action ya da metod tetiklenmez.

Sürekli değişkenlik gösteren veriler üzerinde bu işlemi yapmak sorunlara neden olabilir bu nedenle yine iyi analiz edilerek doğru şekilde uygulanması gerekir. Tarayıcılarda yenileme işlemi yapıldığında cache’den okuma yapılmadan doğrudan ilgili metod call edilir bu nedenle uygulama içi redirect işlemleri yapılırken bu durum göz önüne alınmalıdır.

Distributed Cache

Bu yöntem 3. parti bir yazılım gerektirmektedir. Paylaşılan ortak bir cache alt yapısı kurulmak istendiğinde bu yöntem tercih edilmelidir. Birden fazla uygulama ya da sistem aynı verileri cachelemeye ve o cache pool üzerinde işlemler yapmaya ihtiyaç duyuyor ise distributed cache kullanabilir. Bu konu için Microsoft Velocity ya da redis gibi uygulamaları araştırabilirsiniz.

Projeye Memory Cache ve Response Cache Eklenmesi

Projemizde bulunan ve çoklu dil desteği için kullanacağımız AppResource tablosundaki verilerin çok fazla değişmeyeceği senaryosu üzerinden devam ederek bu entity ile ilgili controllerımız üzerinde hem Memory Cache hem de Response cache alt yapısını kuracağız.

Öncelikle WepApi projemizin içinde bulunan Startup.cs dosyasını aşağıdaki şekilde düzenleyelim. Kodun içinde CacheSection şeklinde adlandırılmış regionları kontrol edelim, bu kısımda yazılan kodlar bizim projemizde bu özellikleri kullanacağımızı söylediğimiz ve ayarlamaları yaptığımız yerler.

Statup.cs dosyası içinde çeşitli cache profilleri oluşturabilir ve bunları kullanabilirsiniz, ya da istemciye döneceğiniz her türlü cevabı cacheleyecekseniz bu kısımda genel bir cache tanımlaması yapabilirsiniz. Aşağıda sadece cache alt yapısı parametresiz olarak çağırılıyor ve default özellikler ile projeye dahil edilmesi bekleniyor.

Memory cache için microsoft’un sitesinde bulunan detaylı anlatıma bu link ile ve response cache ile ilgili anlatımlara ise bu link ile erişebilirsiniz.

Daha sonra AppResourceController’ı aşağıdaki şekilde düzenliyoruz ve sistemimize cacheleme özelliğini de eklemiş oluyoruz.

Tarayıcı üzerinde bu metodu test edip F12 tuşuna basarak network kısmında headerları inceleyebilirsiniz. Dikkat etmeniz gereken en önemli nokta sayfa yenileme yaparsanız cacheden okuma işlemi gerçekleşmez yeni sekmelerde aynı url i açarsanız header kısmında httpstatus alanının yanında from local disk yazısını görebilirsiniz.

Projenin buraya kadar olan kısmı ile ilgili sorun yaşıyorsanız bu link ile github üzerinden projeyi indirebilir ve kendi yazdığınız kodlar ile karşılaştırabilirsiniz. Sorularınız için yorum kısmını kullanabilir ya da mail adresim üzerinde benimle iletişime geçebilirsiniz.
Mail Adresim : mehmetalierol@windowslive.com

<- Önceki Post – Sonraki Post ->