Ohjelmointi

Avoimen lähdekoodin Java-projektit: Java-välimuistijärjestelmä

Enterprise Java -asiantuntija Steve Haines liittyy tässä kuussa avoimen lähdekoodin Java-projektisarjaan esittelyllä Java-välimuistijärjestelmään (JCS), joka on vankka yritystason välimuistiratkaisu. Steve aloittaa pikaoppaalla välimuistista ja keskustelee kriteereistä sen määrittämiseksi, pitäisikö esineitä tallentaa välimuistiin ja hyötyykö sovelluksesi välimuistista. Sitten hän näyttää, kuinka määritetään JCS ja käytetään sitä välimuistisovelluksen rakentamiseen.

Java-välimuistijärjestelmä (JCS) on vankka avoimen lähdekoodin välimuistituote, joka julkaistiin Apache Jakarta -aliprojektin kautta. Se tarjoaa vakio-ominaisuudet, joita voit odottaa välimuistijärjestelmältä, kuten muistin välimuisti ja algoritmit objektien valikoivaan poistamiseen välimuistista. Se tarjoaa myös edistyneempiä ominaisuuksia, kuten indeksoidun levyn välimuistin ja hajautettujen välimuistien tuen.

JCS-välimuistilla on karttamainen rakenne, johon tiedot tallennetaan välimuistiin nimi-arvo-parina. JCS osioi välimuistin alueilla. Jokaisella alueella on oma kokoonpanonsa sekä oma joukko nimi-arvo-pareja. Jokainen alue voi:

  • Ole erikokoinen
  • Toteuta eri tavalla
  • Sisältää erilaisia ​​tietoja

näppäimiä (nimi- ja arvopareissa olevat nimet) yhdellä alueella voivat olla samat kuin muiden alueiden avaimet. Tämä on tärkeää, koska sen avulla voit ylläpitää erillisiä välimuisteja eri objekteille kaikille samassa JVM: ssä - ja kaikki määriteltyinä yhdessä ominaisuustiedostossa.

Avoimen lähdekoodin lisenssit

Jokaisella tämän sarjan kattamalla avoimen lähdekoodin Java-projektilla on lisenssi, jonka sinun tulisi ymmärtää ennen kuin integroit projektin omiin projekteihisi. JCS on Apache-lisenssin alainen; Katso lisätietoja Resursseista.

Tässä artikkelissa tarkastellaan JCS: tä näyttämällä ensin, kuinka hankkia ja asentaa nykyinen julkaisu. Selitän sitten mikä välimuisti on, miksi voit käyttää sitä ja onko se oikea ratkaisu tietylle sovellukselle. Seuraavaksi tutustut JCS-ominaisuustiedostoon, joka on paras tapa ymmärtää JCS. Lopuksi rakennat välimuistisovelluksen, joka käyttää JCS: tä.

Aloita JCS: n käyttö

Voit ladata JCS: n JCS-projektisivuston lataussivulta. Tämän kirjoituksen jälkeen uusin versio on 1.3. Lataa binaarijakauma (joko TAR-tiedostona Unix-järjestelmissä tai ZIP-tiedosto Windowsissa) ja pura se tietokoneesi paikalliseen hakemistoon.

Asennushakemiston juuressa on jcs-1.3.jar, joka sinun on lisättävä omaan CLASSPATH ennen JCS-sovellusten kokoamista ja suorittamista.

Luokan dokumentaatio kultakaivos

Tässä artikkelissa, samoin kuin omissa itsenäisissä tutkimuksissasi, huomaat, että JCS asiakirjat hakemisto on korvaamaton resurssi tietoa JCS: stä, mukaan lukien API-dokumentaatio. Vankka Javadoc-asiakirja on sinun valtuutesi ymmärtää, miten JCS-luokkia käytetään.

Tarvitset kaksi riippuvuutta:

  • Commons-kirjaus
  • Samanaikainen

Lisää Commons Logging -kohdasta commons-logging.jar sinun CLASSPATH.

Nopea välimuistipohja

Välimuisti on suunniteltu pitämään esineitä, tyypillisesti muistissa, jotta sovellus voi käyttää niitä välittömästi. Sovellus toimii eri tavalla välimuistin kanssa kuin ulkoisen tallennusratkaisun kanssa. Tyypillisesti sovellus saa yhteyden tietokantaan, suorittaa kyselyn verkon yli ja jäsentää tulokset, kun ne palautetaan. Välimuisti ylläpitää helposti saatavilla olevien objektien kokoelmaa vankassa karttamuodossa, joka ei vaadi verkkopuhelua. Enterprise Java -sovelluksen suorituskyky paranee räjähdysmäisesti, kun se käyttää välimuistissa olevia uudelleen käytettäviä objekteja ladattuaan ne tietokannasta sen sijaan, että soittaisi etätietokantapuheluja.

Jos sovelluksessasi on hallittavissa oleva määrä objekteja, joita käytetään usein, välimuisti voi todennäköisesti parantaa sen suorituskykyä. Java-sovelluksia rajoittavat JVM: n käytettävissä olevat resurssit, joista arvokkain on muisti. Ei ole järkevää ottaa muistia pois JVM: ltä sellaisten esineiden säilyttämiseksi, joihin pääsee harvoin. On todennäköisesti parempi ladata objekti, jota käytetään kerran muutamassa tunnissa tarpeen mukaan, ja jättää tarpeeksi vapaata muistia muille resursseille. Toisaalta on parempi ladata objektit, joita käytetään useita kertoja minuutissa tai jopa useita kertoja tunnissa, välimuistiin ja palvella niitä muistista sen sijaan, että soittaisit etäpuhelun aina, kun objektia tarvitaan. Jos sovellusten usein käyttämien objektien määrää voidaan hallita käytettävissä olevan muistin sisällä, se on hyvä ehdokas välimuistiin tallentamiseen. Mutta jos se pääsee miljoonia esineistä usein, saattaa silti olla sovelluksen edun mukaista ladata objekteja tarpeen mukaan eikä käyttää välimuistin isännöimiseen 75 prosenttia JVM: n kasasta.

Välimuistiin tallentaminen ja yhdistäminen

Välimuistin ja poolin välisestä erosta syntyy usein hämmennystä välimuistista keskusteluissa. Mitkä objektit tulisi tallentaa välimuistiin ja mitkä objektit tulisi yhdistää? Vastaus on itse esineiden luonteessa. Jos objekti ylläpitää tilaa, se tulisi tallentaa välimuistiin. Valtakunnattomat esineet tulisi yhdistää. Harkitse analogisesti kahta toimintaa: ruoan ostaminen supermarketista ja lapsen noutaminen koulusta. Jokainen kassa voi tarkistaa minkä tahansa asiakkaan supermarketista; ei ole väliä minkä kassan saat, joten kassat tulisi yhdistää. Kun otat lapsesi koulusta, haluat sinun lapsi, ei jonkun toisen oma, joten lapset tulisi tallentaa välimuistiin.

Ekstrapoloimalla tämä idea yrityksen Java-sovellukseen, resurssit, kuten tietokantayhteydet ja liiketoiminnan käsittelypavut, tulisi yhdistää, kun taas objektit, kuten työntekijät, asiakirjat ja widgetit, tulisi tallentaa välimuistiin. Ei ole väliä minkä tietokantayhteyden hakemuksesi saa yhteyspoolista - ne kaikki tekevät saman - mutta jos haluat nostaa itsellesi palkan, on tärkeää, että hankit sinun työntekijän esine.

JCS-alueiden ymmärtäminen

JCS: n käyttö on itse asiassa melko yksinkertaista, mutta tarvitset perustietoa siitä, miten JCS määrittelee välimuistialueet ja miten ne voidaan määrittää. JCS-ominaisuustiedosto on looginen paikka aloittaa JCS: n ymmärtäminen. Luettelossa 1 näkyy esimerkki JCS-ominaisuustiedostosta.

Luettelo 1. JCS-ominaisuustiedosto (cache.ccf)

# DEFAULT CACHE REGION jcs.default = DC jcs.default.cacheattributes = org.apache.jcs.engine.CompositeCacheAttributes jcs.default.cacheattributes.MaxObjects = 1000 jcs.default.cacheattributes.MemoryCacheNem = org .lru.LRUMemoryCache jcs.default.cacheattributes.UseMemoryShrinker = true jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds = 3600 jcs.default.cacheattributes.ShrinkerIntervalSeconds.dll.jp.default.60 jcs.default elementattributes.IsEternal = väärä jcs.default.elementattributes.MaxLifeSeconds = 21600 jcs.default.elementattributes.IdleTime = 1800 jcs.default.elementattributes.IsSpool = true jcs.default.elementattributes.IsRemote = true jcs.default.elementti # ENNEN MÄÄRITETTYJÄ Välimuistin alueet jcs.region.musicCache = DC jcs.region.musicCache.cacheattributes = org.apache.jcs.engine.CompositeCacheAttributes jcs.region.musicCache.cacheattributes.MaxObjects = 1000 jcs.reg.Machory ame = org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.region.musicCache.cacheattributes.UseMemoryShrinker = true jcs.region.musicCache.cacheattributes.MaxMemoryIdleTimeSeconds = 3600 jcs.regers.regic.regic.regic.reg region.musicCache.cacheattributes.MaxSpoolPerRun = 500 jcs.region.musicCache.elementattributes = org.apache.jcs.engine.ElementAttributes jcs.region.musicCache.elementattributes.IsEternal = false # AVAILABLE AUXILIARY Cache.Jap.cs. .jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory jcs.auxiliary.DC.attributes = org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes jcs.auxiliary.DC.attributes.DiskPath.C = / temp .attributes.MaxPurgatorySize = 10000000 jcs.auxiliary.DC.attributes.MaxKeySize = 1000000 jcs.auxiliary.DC.attributes.MaxRecycleBinSize = 5000 jcs.auxiliary.DC.attributes.OptimizeAtRemoveCutxim = 60000 jim

Luettelossa 1 on kolme osaa:

  • Oletusalue määrittää oletusasetukset kaikille alueille, ellei jokin muu alue korvaa sitä nimenomaisesti.
  • Seuraava on luettelo ennalta määritetyistä (eli käyttäjän määrittelemistä) välimuistialueista, joihin tässä tapauksessa sisältyy musicCache jota käytän tulevassa esimerkissä.
  • Ylimääräiset välimuistit määrittelevät apulaitteet joka voidaan liittää välimuistialueelle. Vaikka jokaisella välimuistialueella on oltava yksi (ja vain yksi) muistin lisäapu, siinä voi olla mikä tahansa määrä muita apulaitteita, joihin mahtuu välimuistissa oleva data. Tässä esimerkissä luon indeksoidun levyn välimuistin, mutta voit myös määrittää sivusuunnassa ja etä apulaitteet. Sivuttainen apulaite voi kopioida välimuistissa olevat tiedot muihin välimuistiin TCP-liitännän tai JGroups-protokollapinon kautta. Etäapulainen voi kopioida dataa muihin välimuistiin etämenetelmän kutsun (RMI) kautta.

Jokainen alue voi määritellä välimuistin määritteet yhtä hyvin kuin elementin määritteet. Välimuistimääritelmä määrittää välimuistin määritysvaihtoehdon, kun taas elementti-attribuutti määrittää välimuistin elementtien määritysvaihtoehdon. Tässä on yhteenveto välimuistin attribuuttivaihtoehdoista:

  • MaxObjects: Tämä on muistissa sallittu enimmäismäärä esineitä.
  • MemoryCacheName: Tämän ominaisuuden avulla voit määrittää muistinhallintaohjelman käytettäväksi MemoryCache. Oletusmuistinhallinta toteuttaa LRU-strategian.
  • UseMemoryShrinker: Tämän vaihtoehdon avulla JCS voi toistaa jaksoittain välimuistin yli etsimällä objekteja, jotka voidaan poistaa (kohteet, jotka ovat vanhentuneet tai jotka ovat ylittäneet enimmäiskäyttömäärän). Oletusarvo on väärä.
  • MaxMemoryIdleTimeSeconds: Jos muistin kutistin on käytössä, tämä ominaisuus kertoo JCS: lle, kuinka kauan objekti voi pysyä käyttämättömänä, ennen kuin kutistin poistaa sen (ja taittaa sen levylle, jos indeksoitu levyvälimuisti on luotu). Oletusarvo on -1, joka poistaa tämän vaihtoehdon käytöstä.
  • ShrinkerIntervalSekunnit: Jos muistin kutistin on käytössä, tämä ominaisuus kertoo JCS: lle kuinka usein kutistinta käytetään. Oletusarvo on 60 sekuntia.
  • DiskUsagePattern: Jos levyvälimuisti on käytössä, tämä ominaisuus kertoo JCS: lle, kuinka tietoja säilytetään, kun muistivälimuisti on täynnä. Oletusarvo on VAIHTAA, joka kelaa kohteet levylle vasta, kun muistivälimuisti on täynnä. Toinen vaihtoehto on PÄIVITTÄÄ, joka säilyttää kaikki tiedot levylle, mutta vain, kun tiedot päivitetään. Jos JDBC-apulaite on määritetty levyvälimuistiksi, kaikki objektit jäävät muistiin (kunnes muisti on täynnä) ja säilytetään myös tietokannassa, mikä tarjoaa hyvän suorituskyvyn ja luotettavuuden.

Ja tässä ovat elementtiattribuuttivaihtoehdot:

  • IsEternal: Jos elementti on ikuinen, sitä ei voida poistaa välimuistista, koska se ylittää sen enimmäiskeston. Tämä vaihtoehto on oletusarvoisesti totta.
  • MaxLifeSeconds: Jos elementit eivät ole ikuisia, tämä vaihtoehto määrittää kunkin objektin enimmäiskeston ennen sen poistamista. Jos muistin kutistin on käynnissä, kutistin poistaa objektit; jos ei, ne poistetaan, kun heitä käytetään. Tämä vaihtoehto on oletusarvoisesti -1, joka poistaa vaihtoehdon käytöstä.
  • IsSpool: Tämä vaihtoehto määrittää, voidaanko elementti taittaa levylle. Se on oletuksena totta.
  • Yksipuolinen: Tämä vaihtoehto määrittää, voidaanko elementti lähettää sivusuunnassa olevaan välimuistiin. Se on oletuksena totta.
  • IsRemote: Tämä vaihtoehto määrittää, voidaanko elementti lähettää etävälimuistiin vai ei. Oletusarvo on totta.

Luoin luettelossa 1 alueen nimeltä musicCache johon mahtuu jopa 1000 kohdetta muistissa. Sen muistinhallinta käyttää LRU-algoritmia: kun välimuisti on täynnä ja JCS: n on tehtävä tilaa uusille kohteille, se poistaa kohteet, joita ei ole äskettäin käytetty. Siinä on muistin kutistin käytössä, ja kutistin toimii 60 sekunnin välein. Se häätää kohteet, jotka ovat käyttämättöminä yli 60 minuuttia (3600 sekuntia). Sen kohteet eivät ole ikuisia, ja ne voidaan kirjoittaa levylle, sivuttaiseen välimuistiin tai etävälimuistiin.

Huomaa, että IsSpool, Yksipuolinenja IsRemote asetukset peritään oletusasetuksista. Koska jcs.region.musicCache -elementiksi on asetettu DC, se on määritelty paitsi muistin välimuistin ylläpitämiseksi myös indeksoidun levyn välimuistin käyttämiseksi apuna. (Ominaisuus voidaan asettaa pilkuilla eroteltuun luetteloon useista lisälaitteista.) Levyn välimuisti on määritetty tallentamaan kohteita c: / lämpötila hakemistoon. (JCS suosii eteenpäin vinoviivoja taaksepäin osoittaviin viivoihin.) Loput määritteet määrittävät levyn välimuistin käyttämällä IndexedDiskCacheAttribute esine; voit lukea näistä ominaisuuksista JCS Javadocista.

Välimuistisovelluksen rakentaminen

Kun ymmärrät JCS: n määrittämisen, välimuistisovelluksen luominen on helppoa. Sovelluksen on kyettävä:

  • Alusta välimuisti sen asetustiedostosta
  • Käytä aluetta välimuistissa
  • Lataa objektit välimuistiin
  • Hae objektit välimuistista
  • Poista objektit välimuistista

Välimuisti voidaan alustaa joko automaattisesti tai manuaalisesti. Jos nimeät määritystiedostosi cache.ccf ja laita se suoraan omaan CLASSPATH (kuten juurirakennushakemistosi), sitten kun JCS käynnistetään ensimmäisen kerran, se löytää tiedoston ja alustaa sen oikein. Jos sinun on tallennettava määritystiedostosi muualle tai nimettävä se eri tavalla, voit käyttää org.apache.jcs.utils.props.PropertyLoader loadProperties () tapa ladata JCS-ominaisuudet mistä tahansa ominaisuustiedostosta.

$config[zx-auto] not found$config[zx-overlay] not found