HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Cache-ben tárolt adatok élettartamának meghatározása


Web Cache 3. rész

Példaprogram letöltése

9338 bájt

A Cache-ben tárolt tetszőleges adat esetén előírhatjuk, hogy az meddig érvényes. Ha az érvényesség lejárt, akkor az adat törlésre kerül a Cache területéről és alkalmazásunk egy esemény formájában értesítést kap erről a tényről, így szükség szerint az adat frissíthető és újból elhelyezhető a Cache területén.

Az esemény felhasználásához szükségünk lesz egy CacheItemRemovedCallback típusú változóra, mely az eseménykezelő függvény címét tárolja majd.
    private static CacheItemRemovedCallback Removed = null;
A konstruktorban kap értéket e változó.
    public WebForm1()
    {
      Page.Init += new System.EventHandler(Page_Init);
Itt kerül megadásra a RemovedCache nevű belső függvényünk, mely akkor kerül majd meghívásra, amikor a Cache törölte az adatunkat.
      Removed = new CacheItemRemovedCallback(RemovedCache);
    }
A Page_Init eseménykezelő függvényben helyezzük el először a Cache-re az adatot. Így mire alkalmazásunk elindul, a szükséges adat a Cache-ből már elérhető lesz.
    private void Page_Init(object sender, EventArgs e)
    {
      InitializeComponent();
Az adat elhelyezésére a Cache objektum Add függvényét használjuk. Itt első paraméterben adjuk meg a tárolandó objektumunk nevét. A második paraméter lesz a tárolandó adat, melyet most egy belső függvényünk készít el. A harmadik paraméterben egy függőséget írhatnánk elő, melyre mostani példánkhoz nincs szükség, de múlt heti cikkünkben már foglalkoztunk a CacheDependency osztállyal.
A negyedik vagy az ötödik paraméter lesz az, mely az adat élettartamát befolyásolja. A kettő közül csak az egyiket használhatjuk, mivel ez két különböző módot jelent, melyeknek együtt nem lenne értelme.
Ha a negyedik paraméterben megadunk egy konkrét, fix időpontot, akkor ezzel azt érjük el, hogy az adott időpontban a Cache törli az adatot minden esetben. Alábbi példánál e konkrét időt úgy adjuk meg, hogy az aktuális időhöz 10 másodpercet hozzáadunk. Ebben az esetben tehát 10 másodperc múlva mindenképpen törölve lesz a Cache-ből az adat. Ezt ki is próbálhatjuk: futtassuk a programot és folyamatosan kattintsunk a frissítés gombra. Látható lesz, hogy a web oldalon megjelenő időpont – melyet a Cache-en tárolt adatból veszünk – csak 10 másodpercenként frissül.
      Cache.Add("StringData", RetriveCacheData(), null, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration, CacheItemPriority.High, Removed);
Ebben az esetben az ötödik paraméternél a Cache osztály NoSlidingExpiration mezőjének értéket kell megadnunk.
A másik lehetőség a következő: a negyedik paramétert nem használjuk, ekkor itt a Cache osztály NoAbsoluteExpiration mezőjének értékét kell használnunk, míg az ötödik paraméterben egy TimeSpan osztályban tárolt időpontot adhatunk meg. Ebben az esetben a következő történik, ha az itt megadott időtartam két webes kérés között eltelik, akkor kerül törlésre a Cache-ben tárolt adat. Alábbi példában egy 10 másodperces időt adtunk meg a TimeSpan osztályban. Ha tehát két kérés között több mint 10 másodperc telik el, akkor lesz törölve a cache-ről az adatunk. Ezt ki is próbálhatjuk: a mellékelt példában a Cache.Add függvény hívásban írjuk át a paramétereket az alábbiakra, valamint ugyanezt tegyük a RemovedCache függvényünkben is, és futtassuk a programot. Ha a frissítés gombra kattintunk 10 másodpercen belül, akkor mindig ugyanazt az adatot látjuk, ha a két frissítés között várunk 10 másodpercet, akkor a Cache törölni fogja az adatot és így az frissül.
      Cache.Add("StringData", RetriveCacheData(), null, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration, CacheItemPriority.High, Removed);
Bármelyik esetet is használjuk a két fenti közül, fontos, hogy az Add függvény utolsó paraméterében megadjuk a CacheItemRemovedCallback típusú változóban tárolt függvényünket, melyet a Cache-nek meg kell hívnia akkor, ha törölte adatunkat.
Ebben az esetben az adatunkat újra kell generálni és elhelyezni ismét a Cache-ben.
Ehhez ugyanazt a módszert használjuk, mint a fentiekben.
    public void RemovedCache(string k, object v, CacheItemRemovedReason r) 
    {
      Cache.Add("StringData", RetriveCacheData(), null, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration, CacheItemPriority.High, Removed);
    }
A RetriveCacheData függvényünk lesz az, mely előállítja a szükséges adatot a Cache-ben való tároláshoz. Az egyszerűség kedvéért ez most az aktuális dátum és időpont lesz sztringgé alakítva.
    public string RetriveCacheData()
    {
      return DateTime.Now.ToString("T");
    }
A web oldal betöltődésekor a Page_Load eseménykezelőben olvassuk ki a Cache-en elhelyezett adatot és annak tartalmát megjelenítjük egy Label kontrol segítségével.
    private void Page_Load(object sender, System.EventArgs e)
    {
      string s = (string)Cache["StringData"];
      Label1.Text = s;
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2001 évkönyv 295. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |