folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Asp.Net Mvc Outputcache (Önceki Cacheleri Silmek?)



Asp.Net Mvc Outputcache (Önceki Cacheleri Silmek?)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    Basit bi forum sitesi düşünelim sağda bir menü olsun ve son açılan 50 adet konuyu orada listelemek isteyelim.Şimdi bu menu bütün sayfalarda olacağı için bu menüyu oluşturma işlemini bir child action a yaptırıyorum.Menünun yer alacağı view a gidiyorum.

      @{

             Html.RenderAction("GetMenu", "Home", new RouteValueDictionary { { "versiyonNumarasi", versiyonDegeri }});

        }

    Burdan child action ı çağırıyorum. Child actionım da aşağıdaki gibi

    [ChildActionOnly]  

    [OutputCache(Duration = 600, VaryByParam="versiyonNumarasi")]

    public ActionResult GetMenu(int versiyonNumarasi)

    {

          // içerde veritabanından son 50 postu çekiyorum ve partialview olarak view a basıyorum.

    }

    Child Action ı cagırdımız satırdaki versiyonNumarasi na atadığımız versiyonDeğerini, public static bi değişkenden yada httpruntime.cache[""] gibi bütün kullanıcıların erişebileceği bir yerde sakladığımızı düşünelim. Bir kullanıcı siteye girince versiyonu sakladığımız static değişkene bakacak ve o değişken i parametre olarak GetMenu isimli childaction a yollayacak.Eğerki birisi yeni konu açarsa versiyonu 1 artıracak. Artık versiyon herkes için 1 artmış olacak çünkü statik bi yerde.Ve yapılacak yeni isteklerde VaryByParam="versiyonNumarasi" dediğimiz içinde hemen child action method yeniden çağrılacak ve yeni cache oluşturulacak.

    Sorular:

    1-) Cache süresine duration 600 dedik 10 dakika yani. Son 2 dakikada 15 tane konu acılsa versiyonNumber 1 den baslasa 15 e kadar gelse. İlk 14 cache hala saklanıyor olacak.Bütün kullanıcılar menüyü çekerken 15 numarayı kullansada yinede ilk 14 ün ölmesi için her cache in ayrı ayrı duration 600 ü doldurması gerekecek değil mi? Bu önceki cacheleri güvenli olarak nasıl silebiliriz?

    2-) Bir de outputCache ın nostore parametresi ile biz client a sana gönderdiğim verileri bi yerde saklama demiş olmuyor muyuz?

    http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/improving-performance-with-output-caching-cs    bu linkte Listing 4 te location client denmıs ve nostore = true   bu kısmında anlamadım.

    Verdiğim örnek ve yaklaşım doğru mudur? Fikirlerinizi ve bilgilerinizi paylaşırsanız sevinirim.


    lrny.app
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trampfd
    trampfd's avatar
    Kayıt Tarihi: 10/Mayıs/2006
    Erkek

    Bu tarz bir kullanımda cache süresini 1sn gibi kısa bir süreden daha fazla yapmanın hiç bir getirisi olmayacaktır, hele ki cache datanın değişimini hesaplayıp update etme işine girmek tamamen gereksiz olur.

    Süre 1sn bile olsa, clienttan gelen her request için (belki sn de 1000 request gelen büyük bir proje?) db ye gidilmemiş olunacak, her saniye başı db ye gidilmiş olunacak, db server saniye başı sorgu (doğru optimize edilmiş queryler olduğunu farzedersek) ile yorulmayacaktır önemli olan da bu.


    Ehl-i Byte
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    Yani diyorsunki hocam cache in süresini 20-30 saniye falanda yapabilirm.Doğrumu anladım acaba?  20-30 saniye değil her saniye sorgu gitse yinede yorulmaz server diyosun sanırım.


    lrny.app
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trampfd
    trampfd's avatar
    Kayıt Tarihi: 10/Mayıs/2006
    Erkek
    Hannibal_King bunu yazdı

    Yani diyorsunki hocam cache in süresini 20-30 saniye falanda yapabilirm.Doğrumu anladım acaba?  20-30 saniye değil her saniye sorgu gitse yinede yorulmaz server diyosun sanırım.

    Aynen öyle, maksat her requestte db ye gitmemek, çünkü yeri geldiğinde anlık binlerce request atılabilir ya da bir tool yazılıp siteye flood yapılabilir, bu gibi durumlarda binlerce kez db ye gitmemiş olmak yeterli.

    Ben genelde çok spesifik olmayan işlerde db sorgulayan actionlara cache süresini 1sn den fazla vermem.


    Ehl-i Byte
Toplam Hit: 790 Toplam Mesaj: 4
asp.net mvc outputcache