Programmēšana

Atvērtā koda Java projekti: Java kešatmiņas sistēma

Enterprise Java speciālists Stīvs Hainess šomēnes pievienojas Open source Java projektu sērijai, iepazīstinot ar Java Caching System (JCS), kas ir spēcīgs uzņēmuma līmeņa kešatmiņas risinājums. Stīvs sāk ar ātru ievadu kešatmiņā, apspriežot kritērijus, lai noteiktu, vai objekti ir kešatmiņā un vai jūsu lietojumprogrammai būtu noderīga kešatmiņa. Pēc tam viņš parāda, kā konfigurēt JCS un izmantot to, lai izveidotu kešatmiņas lietojumprogrammu.

Java kešatmiņas sistēma (JCS) ir spēcīgs atvērtā koda kešatmiņas produkts, kas izlaists, izmantojot Apache Jakarta apakšprojektu. Tas nodrošina standarta funkcijas, kuras jūs varētu sagaidīt no kešatmiņas sistēmas, piemēram, kešatmiņa atmiņā un algoritmi objektu selektīvai noņemšanai no kešatmiņas. Tas piedāvā arī uzlabotas funkcijas, piemēram, indeksēto disku kešatmiņu un atbalstu izplatītajām kešatmiņām.

JCS kešatmiņā ir kartei līdzīga struktūra, kurā dati tiek saglabāti kešatmiņā kā vārdu un vērtību pāris. JCS sadala kešatmiņu reģionos. Katram reģionam ir sava konfigurācija, kā arī savs vārdu un vērtību pāru kopums. Katrs reģions var:

  • Izmērs ir atšķirīgs
  • Ieviest citādi
  • Satur dažādus datus

The taustiņus (nosaukumi vārdu un vērtību pāros) vienā reģionā var būt tādi paši kā taustiņi citos reģionos. Tas ir svarīgi, jo tas ļauj uzturēt atsevišķas kešatmiņas dažādiem objektiem visiem vienā un tajā pašā JVM un visiem, kas definēti vienā rekvizītu failā.

Atvērtā koda licences

Katram no atvērtā koda Java projektiem, uz kuriem attiecas šī sērija, ir nepieciešama licence, kas jums ir jāsaprot pirms projekta integrēšanas ar saviem projektiem. Uz JCS attiecas Apache licence; Skatiet resursus, lai uzzinātu vairāk.

Šajā rakstā ir izpētīts JCS, vispirms parādot, kā iegūt un instalēt pašreizējo laidienu. Tad es paskaidrošu, kas ir kešatmiņa, kāpēc jūs to varētu izmantot un vai tas ir vai nav pareizais risinājums konkrētai lietojumprogrammai. Pēc tam jūs iedziļināsieties JCS rekvizītu failā, kas ir labākais veids, kā izprast JCS. Visbeidzot, jūs izveidosiet kešatmiņas lietojumprogrammas paraugu, kas izmanto JCS.

Sāciet darbu ar JCS

JCS varat lejupielādēt no JCS projekta vietnes lejupielāžu lapas. Kopš šī raksta jaunākā versija ir 1.3. Lejupielādējiet bināro sadalījumu (vai nu kā TAR failu Unix sistēmās, vai ZIP failu sistēmā Windows) un dekompresējiet to datora lokālajā direktorijā.

Instalācijas direktorija saknē ir jcs-1.3.jar, kas jums jāpievieno savam CLASSPATH pirms JCS lietojumprogrammu apkopošanas un palaišanas.

Klases dokumentācija zelta raktuve

Šajā rakstā, kā arī savos neatkarīgajos pētījumos jūs atradīsit, ka JCS dokumenti direktorijs ir nenovērtējams resurss informācijai par JCS, ieskaitot API dokumentāciju. Izturīgais Javadoc dokuments ir jūsu autoritāte, lai saprastu, kā izmantot JCS klases.

Jums būs nepieciešamas divas atkarības:

  • Commons reģistrēšana
  • Vienlaicīgi

No Commons Logging pievienojiet commons-logging.jar uz tavu CLASSPATH.

Ātrs kešatmiņas grunts

Kešatmiņa ir paredzēta objektu glabāšanai, parasti atmiņā, lai lietojumprogramma varētu tiem nekavējoties piekļūt. Lietojumprogramma mijiedarbojas ar kešatmiņu atšķirīgi no tā, kā tā mijiedarbojas ar ārējās atmiņas risinājumiem. Parasti lietojumprogramma iegūst savienojumu ar datu bāzi, tīklā izpilda vaicājumu un parsē rezultātus, kad tie tiek atgriezti. Kešatmiņa uztur viegli pieejamu objektu kolekciju stabilā kartei līdzīgā struktūrā, kurai nav nepieciešams tīkla zvans. Uzņēmuma Java lietojumprogrammu veiktspēja uzlabojas eksponenciāli, kad pēc tam, kad tie ir ielādēti no datu bāzes, piekļūst atkārtoti lietojamiem objektiem kešatmiņā, nevis veicot attālās datu bāzes izsaukumus.

Ja jūsu lietojumprogrammai ir pārvaldāms objektu skaits, kuriem bieži piekļūst, kešatmiņa, iespējams, var uzlabot tā veiktspēju. Java lietojumprogrammas ierobežo JVM pieejamie resursi, no kuriem visdārgākais ir atmiņa. Nav jēgas atņemt atmiņu JVM, lai turētu objektus, kuriem reti piekļūst. Iespējams, labāk ir ielādēt objektu, kuram piekļūst reizi pāris stundās, cik nepieciešams, un atstāt pietiekami daudz brīvas atmiņas citiem resursiem. No otras puses, labāk ir ielādēt kešatmiņā objektus, kuriem piekļūst vairākas reizes minūtē vai pat vairākas reizes stundā, un tos apkalpot no atmiņas, nevis veikt tālvadības zvanu katru reizi, kad objekts ir nepieciešams. Ja pieejamo atmiņu var pārvaldīt objektu skaits, kuriem jūsu lietojumprogramma bieži piekļūst, tad tas ir labs kešatmiņas kandidāts. Bet, ja tas piekļūst miljoniem objektu bieži, tad joprojām lietojumprogrammas interesēs varētu būt objektu ielāde pēc nepieciešamības, nevis kešatmiņas mitināšana 75 procentu apmērā no JVM kaudzes.

Kešatmiņa salīdzinājumā ar koplietošanu

Diskusijās par kešatmiņu bieži rodas neskaidrības par kešatmiņas un kopas nošķiršanu. Kurus objektus vajadzētu saglabāt kešatmiņā un kādi objektus apvienot? Atbilde slēpjas pašu objektu raksturā. Ja objekts saglabā stāvokli, tam jābūt kešatmiņā. Objekti bezvalstniekiem būtu jāapvieno. Kā analoģiju apsveriet divas darbības: pārtikas iegādi lielveikalā un bērna uzņemšanu no skolas. Jebkurš kasieris var pārbaudīt jebkuru klientu lielveikalā; nav svarīgi, kuru kasieri jūs saņemat, tāpēc kasieri būtu jāapvieno. Kad jūs uzņemat bērnu no skolas, jūs vēlaties jūsu bērns, nevis kāds cits, tāpēc bērniem vajadzētu būt kešatmiņā.

Ekstrapolējot šo ideju uzņēmuma Java, būtu jāapkopo tādi resursi kā datu bāzes savienojumi un biznesa apstrādes pupiņas, savukārt kešatmiņā būtu jābūt objektiem, piemēram, darbiniekiem, dokumentiem un logrīkiem. Nav svarīgi, kuru datu bāzes savienojumu jūsu lietojumprogramma iegūst no savienojumu kopas - viņi visi dara to pašu - bet, ja vēlaties sev paaugstināt algu, ir svarīgi, lai jūs iegūtu jūsu darbinieka objekts.

Izpratne par JCS reģioniem

JCS izmantošana faktiski ir diezgan vienkārša, taču jums ir nepieciešamas pamatzināšanas par to, kā JCS definē kešatmiņas reģionus un kā tos var konfigurēt. JCS rekvizītu fails ir loģiska vieta, kur sākt izprast JCS. 1. sarakstā tiek parādīts JCS rekvizītu faila paraugs.

Saraksts 1. JCS rekvizītu fails (cache.ccf)

# Noklusējuma kešatmiņas reģions 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.cs.default. 60. jcs.default. elementattributes.IsEternal = false jcs.default.elementattributes.MaxLifeSeconds = 21600 jcs.default.elementattributes.IdleTime = 1800 jcs.default.elementattributes.IsSpool = true jcs.default.elementattributes.IsRemote = true jcs.default.el # IESPĒJAMIE KEMEŅA REĢIONI jcs.region.musicCache = DC jcs.region.musicCache.cacheattributes = org.apache.jcs.engine.CompositeCacheAttributes jcs.region.musicCache.cacheattributes.MaxObjects = 1000 jcs.regea.region.music 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. region.musicCache.cacheattributes.MaxSpoolPerRun = 500 jcs.region.musicCache.elementattributes = org.apache.jcs.engine.ElementAttributes jcs.region.musicCache.elementattributes.IsEternal = false # AVAILABLE AUXILIARY Cache Directory jcs.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.CustomSimput.im = 60000

1. sarakstā ir trīs sadaļas:

  • Noklusējuma reģions definē noklusējuma konfigurāciju visiem reģioniem, ja vien to nepārprotami nepārņem kāds no citiem reģioniem.
  • Nākamais ir iepriekš noteiktu (tas ir, lietotāja definētu) kešatmiņas reģionu saraksts, kurā šajā gadījumā ietilpst musicCache ko izmantošu gaidāmajā piemērā.
  • Papildu kešatmiņas definē palīgierīces ko var pieslēgt kešatmiņas apgabalā. Kaut arī katram kešatmiņas reģionam ir jābūt vienam (un tikai vienam) atmiņas palīglīdzeklim, tajā var būt jebkurš cits palīgierīču skaits, kas var glabāt kešatmiņā saglabātus datus. Šajā piemērā es izveidoju indeksētu diska kešatmiņu, bet jūs varat arī definēt sānu un tālvadības pults palīgierīces. Sānu palīgierīce var atkārtot jūsu kešatmiņā saglabātos datus citās kešatmiņās, izmantojot TCP ligzdu vai JGroups protokola kaudzi. Attālinātais palīgs var kopēt datus uz citām kešatmiņām, izmantojot attālās metodes izsaukšanu (RMI).

Katrs reģions var definēt kešatmiņas atribūti kā arī elementa atribūti. Kešatmiņas atribūts nosaka kešatmiņas konfigurācijas opciju, savukārt elementa atribūts - kešatmiņā esošo elementu konfigurācijas opciju. Kešatmiņas atribūtu opciju kopsavilkums:

  • MaxObjects: Šis ir maksimālais atmiņā atļautais objektu skaits.
  • MemoryCacheName: Šis rekvizīts ļauj noteikt atmiņas pārvaldnieku, kuru izmantot kā savu MemoryCache. Noklusējuma atmiņas pārvaldnieks īsteno LRU stratēģiju.
  • IzmantojietMemoryShrinker: Šī opcija ļauj JCS periodiski atkārtot kešatmiņu, meklējot objektus, kurus var noņemt (vienumi, kuru derīguma termiņš ir beidzies vai kuri ir pārsnieguši maksimālo brīvgaitas laiku). Noklusējuma vērtība ir nepatiesa.
  • MaxMemoryIdleTimeSeconds: Ja atmiņas saraušanas rīks ir iespējots, šis rekvizīts norāda JCS, cik ilgi objekts var palikt dīkstāvē, pirms saruktājs to noņem (un spolē to uz diska, ja ir izveidota indeksēta diska kešatmiņa). Noklusējuma vērtība ir -1, kas atspējo šo opciju.
  • ShrinkerIntervalSeconds: Ja atmiņas saraušanas ierīce ir iespējota, šis rekvizīts norāda JCS, cik bieži palaist saruktāju. Noklusējuma vērtība ir 60 sekundes.
  • DiskUsagePattern: Ja ir iespējota diska kešatmiņa, šis rekvizīts norāda JCS, kā saglabāt datus, kad atmiņas kešatmiņa ir pilna. Noklusējuma vērtība ir APMAIŅA, kas spolē vienumus diskā tikai tad, kad atmiņas kešatmiņa ir pilna. Otra iespēja ir ATJAUNINĀT, kas visus datus saglabā diskā, bet tikai tad, kad dati tiek atjaunināti. Ja JDBC palīgierīce ir definēta kā diska kešatmiņa, visi objekti paliek atmiņā (līdz atmiņa ir pilna) un tiek saglabāta arī datu bāzē, kas nodrošina labu veiktspēju, kā arī uzticamību.

Un šeit ir elementa atribūta opcijas:

  • IsEternal: Ja elements ir mūžīgs, tad to nevar noņemt no kešatmiņas, jo tas pārsniedz tā maksimālo mūžu. Šī opcija pēc noklusējuma ir taisnība.
  • MaxLifeSeconds: Ja elementi nav mūžīgi, šī opcija nosaka katra objekta maksimālo mūžu pirms tā noņemšanas. Ja atmiņas saraušanas ierīce darbojas, saraušanas objekts tiek noņemts; ja nē, tie tiek noņemti, kad viņiem piekļūst. Šī opcija pēc noklusējuma ir -1, kas atspējo opciju.
  • IsSpool: Šī opcija nosaka, vai elementu var spolēt diskā. Pēc noklusējuma taisnība.
  • Vienpusējs: Šī opcija nosaka, vai elementu var nosūtīt uz sānu kešatmiņu. Pēc noklusējuma taisnība.
  • IsRemote: Šī opcija nosaka, vai elementu var nosūtīt uz attālo kešatmiņu. Pēc noklusējuma taisnība.

Sarakstā 1 es izveidoju reģionu ar nosaukumu musicCache kas atmiņā glabā līdz 1000 vienībām. Tās atmiņas pārvaldnieks izmanto LRU algoritmu: kad kešatmiņa ir pilna un JCS ir jāatbrīvo vieta jauniem vienumiem, tas noņems vienumus, kuriem nesen nav piekļūts. Tam ir iespējota atmiņas saraušanas ierīce, un tā darbosies ik pēc 60 sekundēm. Tas izdzīs vienumus, kas dīkstāvē ilgāk par 60 minūtēm (3600 sekundes). Tā priekšmeti nav mūžīgi, un tos var ierakstīt diskā, sānu kešatmiņā vai attālā kešatmiņā.

Ņemiet vērā, ka IsSpool, Vienpusējs, un IsRemote iestatījumi tiek mantoti no noklusējuma iestatījumiem. Tāpēc ka jcs.region.musicCache elements ir iestatīts uz DC, tas ir definēts ne tikai atmiņas kešatmiņas uzturēšanai, bet arī kā indeksu izmantot indeksēto disku kešatmiņu. (Īpašību var iestatīt ar komatu atdalītu vairāku palīgierīču sarakstu.) Diska kešatmiņa ir konfigurēta, lai vienumus saglabātu mapē c: / temp direktorijā. (JCS dod priekšroku slīpsvītrām uz priekšu, nevis atpakaļ slīpsvītrām.) Pārējie atribūti konfigurē diska kešatmiņu, izmantojot IndexedDiskCacheAttribute objekts; par šiem atribūtiem varat lasīt JCS Javadoc.

Kešatmiņas lietojumprogrammas parauga izveide

Kad esat sapratis, kā konfigurēt JCS, kešatmiņas lietojumprogrammas izveide ir vienkārša. Lietojumprogrammai jāspēj:

  • Inicializējiet kešatmiņu no tās konfigurācijas faila
  • Piekļūstiet reģionam kešatmiņā
  • Ielādējiet objektus kešatmiņā
  • Iegūstiet objektus no kešatmiņas
  • Noņemiet objektus no kešatmiņas

Kešatmiņu var inicializēt vai nu automātiski, vai manuāli. Ja jūs nosaucat savu konfigurācijas failu cache.ccf un ievietojiet to tieši savā CLASSPATH (piemēram, saknes veidošanas direktoriju), pēc tam, kad pirmo reizi tiek izsaukta JCS, tā atrod failu un atbilstoši inicializē. Ja jums konfigurācijas fails ir jāglabā citur vai jānosauc citādi, varat izmantot org.apache.jcs.utils.props.PropertyLoader loadProperties () metode, kā ielādēt JCS rekvizītus no jebkura rekvizītu faila.

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