מבוא ל- JCache

1. סקירה כללית

במילים פשוטות, JCache הוא ממשק ה- API לשמירה במטמון רגיל עבור Java. במדריך זה, נראה מהו JCache וכיצד נוכל להשתמש בו.

2. תלות Maven

כדי להשתמש ב- JCache, עלינו להוסיף את התלות הבאה שלנו pom.xml:

 javax.cache cache-api 1.0.0-PFD 

שים לב שאנחנו יכולים למצוא את הגרסה האחרונה של הספרייה במאגר המרכזי של Maven.

עלינו להוסיף גם יישום של ה- API שלנו pom.xml; נשתמש ב- Hazelcast כאן:

 com.hazelcast hazelcast 3.9-EA 

אנו יכולים למצוא את הגרסה האחרונה של Hazelcast במאגר המרכזי של Maven.

3. יישומי JCache

JCache מיושם על ידי פתרונות מטמון שונים:

  • יישום הפניה JCache
  • Hazelcast
  • קוהרנטיות אורקל
  • טרקוטה אקצ'ה
  • אינסוף

שים לב שבניגוד ליישומי הפניה אחרים, לא מומלץ להשתמש ביישום הפניה של JCache בייצור מכיוון שהוא גורם לבעיות במקביל.

4. רכיבים עיקריים

4.1. מטמון

ה מטמון הממשק כולל את השיטות השימושיות הבאות:

  • לקבל() - לוקח את המפתח של אלמנט כפרמטר ומחזיר את ערך האלמנט; זה חוזר ריק אם המפתח אינו קיים ב- מטמון
  • קבל הכל() - ניתן להעביר מספר מפתחות לשיטה זו כ- מַעֲרֶכֶת; tהשיטה הוא מחזירה את המפתחות הנתונים ואת הערכים המשויכים כ- מַפָּה
  • getAndRemove () - השיטה מאחזרת ערך באמצעות המפתח שלה ומסירה את האלמנט מה- מטמון
  • לָשִׂים() - מוסיף פריט חדש ב- מטמון
  • ברור() - מסיר את כל האלמנטים ב- מטמון
  • containKey () - בודק אם א מטמון מכיל מפתח מסוים

כפי שאנו רואים, שמות השיטות די מסבירים את עצמם. למידע נוסף על שיטות אלה ואחרות, בקרו ב- Javadoc.

4.2. CacheManager

CacheManager הוא אחד הממשקים החשובים ביותר של ה- API. זה מאפשר לנו ליצור, להגדיר ולסגור מטמונים.

4.3. CachingProvider

CachingProvider הוא ממשק המאפשר לנו ליצור ולנהל את מחזור החיים של CacheManagers.

4.4. תְצוּרָה

תְצוּרָה הוא ממשק המאפשר לנו להגדיר תצורה מטמונים. יש לה יישום קונקרטי אחד - תצורה משתנה וממשק משנה - תצורה מלאה.

5. יצירת א מטמון

בואו נראה איך נוכל ליצור פשוט מטמון:

CachingProvider cachingProvider = Caching.getCachingProvider (); CacheManager cacheManager = cachingProvider.getCacheManager (); MutableConfiguration config = חדש MutableConfiguration (); מטמון מטמון = cacheManager .createCache ("פשוט מטמון", config); cache.put ("key1", "value1"); cache.put ("key2", "value2"); cacheManager.close ();

כל מה שאנחנו עושים זה:

  • ליצור CachingProvider אובייקט, בו אנו משתמשים כדי לבנות a CacheManager לְהִתְנַגֵד
  • ליצור תצורה משתנה אובייקט, שהוא יישום של תְצוּרָה מִמְשָׁק
  • ליצור מטמון אובייקט באמצעות CacheManager אובייקט שיצרנו קודם
  • אם אנו מכניסים את כל הערכים, אנו צריכים לשמור במטמון בתוכנו מטמון לְהִתְנַגֵד
  • סוגרים את CacheManager לשחרר את המשאבים המשמשים את מטמון

אם אנו לא מספקים כל יישום של JCache ב pom.xml, יוציא החריג הבא:

javax.cache.CacheException: לא הוגדרו CachingProviders

הסיבה לכך היא שה- JVM לא מצא שום יישום קונקרטי של ה- getCacheManager () שיטה.

6. EntryProcessor

EntryProcessor מאפשר לנו לשנות מטמון ערכים המשתמשים בפעולות אטומיות ללא צורך להוסיף אותם מחדש ל מטמון. כדי להשתמש בו, עלינו ליישם את ה- EntryProcessor מִמְשָׁק:

מחלקה ציבורית SimpleEntryProcessor מיישמת את EntryProcessor, Serializable {public String process (MutableEntry entry, Object ... args) זורק EntryProcessorException {if (entry.exists ()) {String current = entry.getValue (); entry.setValue (הנוכחי + "- שונה"); זרם החזרה; } להחזיר אפס; }}

עכשיו, בואו נשתמש שלנו EntryProcessor יישום:

@Test הציבור בטל כאשרModifyValue_thenCorrect () {this.cache.invoke ("מפתח", SimpleEntryProcessor חדש ()); assertEquals ("value - modified", cache.get ("key")); }

7. מאזינים לאירועים

מאזינים לאירועים מאפשרים לנו לבצע פעולות עם הפעלת כל אחד מסוגי האירועים המוגדרים ב- סוג אירוע enum, שהם:

  • נוצר
  • מְעוּדכָּן
  • הוסר
  • לא בתוקף

ראשית, עלינו ליישם ממשקים של האירועים בהם אנו נשתמש.

לדוגמה, אם אנו רוצים להשתמש ב- נוצר וה מְעוּדכָּן סוגי אירועים, אז עלינו ליישם את הממשקים CacheEntryCreatedListener ו CacheEntryUpdatedListener.

בואו נראה דוגמה:

מחלקה ציבורית מיישמת SimpleCacheEntryListener CacheEntryCreatedListener, CacheEntryUpdatedListener, ניתן לסידור {בוליאני פרטי עודכן; נוצר בוליאני פרטי; // getters סטנדרטי ציבורי בטל ב- Updated (Iterable אירועים) זורק את CacheEntryListenerException {this.updated = true; } חלל ציבורי onCreated (Iterable אירועים) זורק את CacheEntryListenerException {this.created = true; }}

עכשיו, בואו נבצע את הבדיקה שלנו:

@ מבחן ציבורי בטל כאשר RunEvent_thenCorrect () זורק את InterruptedException {this.listenerConfiguration = new MutableCacheEntryListenerConfiguration (FactoryBuilder.factoryOf (this.listener), null, false, true); this.cache.registerCacheEntryListener (this.listenerConfiguration); assertEquals (שקר, this.listener.getCreated ()); this.cache.put ("מפתח", "ערך"); assertEquals (נכון, this.listener.getCreated ()); assertEquals (שקר, this.listener.getUpdated ()); this.cache.put ("מפתח", "newValue"); assertEquals (נכון, this.listener.getUpdated ()); }

8. מטמון מטמון

מטמון מטמון מאפשראותנו להשתמש במצב קריאהלהתייחס למטמון כאל מאגר הנתונים הראשי ולקרוא נתונים ממנו.

בתרחיש של עולם אמיתי, נוכל לקרוא את המטמון לקרוא נתונים מהאחסון בפועל.

בואו נסתכל על דוגמא. ראשית, עלינו ליישם את מטמון מטמון מִמְשָׁק:

מחלקה ציבורית SimpleCacheLoader מיישם CacheLoader {עומס מחרוזות ציבורי (מפתח שלם) זורק את CacheLoaderException {להחזיר "מ- Cache" + מפתח; } עומס מפה ציבורי All (מקשים ניתנים לניצול) זורק CacheLoaderException {Map data = new HashMap (); עבור (מפתח key: מקשים) {data.put (מפתח, load (key)); } להחזיר נתונים; }}

ועכשיו, בואו נשתמש שלנו מטמון מטמון יישום:

מחלקה ציבורית CacheLoaderTest {מטמון מטמון פרטי; @ לפני התקנת הריק הציבורי () {CachingProvider cachingProvider = Caching.getCachingProvider (); CacheManager cacheManager = cachingProvider.getCacheManager (); MutableConfiguration config = חדש MutableConfiguration () .setReadThrough (true) .setCacheLoaderFactory (FactoryBuilder.SingletonFactory חדש (SimpleCacheLoader חדש ())); this.cache = cacheManager.createCache ("SimpleCache", תצורה); } @Test ציבורי בטל whenReadingFromStorage_thenCorrect () {עבור (int i = 1; i <4; i ++) {ערך מחרוזת = cache.get (i); assertEquals ("fromCache" + i, ערך); }}}

9. מסקנה

במדריך זה ראינו מהו JCache וחקרנו כמה מהתכונות החשובות שלו בכמה תרחישים מעשיים.

כמו תמיד, ניתן למצוא את היישום המלא של מדריך זה ב- GitHub.


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