מבוא ל- Ehcache

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

במאמר זה נציג את Ehcache, מטמון מבוסס קוד פתוח שנמצא בשימוש נרחב ב- Java. הוא כולל חנויות זיכרון ודיסק, מאזינים, מעמיסי מטמון, ממשקי API של RESTful ו- SOAP ותכונות שימושיות אחרות.

כדי להראות כיצד מטמון יכול לייעל את היישום שלנו, ניצור שיטה פשוטה שתחשב ערכים מרובעים של המספרים המסופקים. בכל שיחה, השיטה תתקשר calcSquareOfNumber (מספר int) שיטה ולהדפיס הודעת מידע למסוף.

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

חשוב לשים לב שאנו מתמקדים לחלוטין ב- Ehcache עצמו (ללא אביב); אם אתה רוצה לראות איך Ehcache עובד עם אביב, עיין ב קרא מאמר זה.

2. תלות Maven

על מנת להשתמש ב- Ehcache עלינו להוסיף את התלות הזו ב- Maven:

 org.ehcache ehcache 3.1.3 

הגרסה האחרונה של חפץ Ehcache נמצאת כאן.

3. תצורת מטמון

ניתן להגדיר את ה- Ehcache בשתי דרכים:

  • הדרך הראשונה היא דרך Java POJO כאשר כל פרמטרי התצורה מוגדרים באמצעות Ehcache API
  • הדרך השנייה היא תצורה באמצעות קובץ XML שבו אנו יכולים להגדיר את Ehcache על פי הגדרת הסכימה המסופקת

במאמר זה נציג את שתי הגישות - Java כמו גם תצורת XML.

3.1. תצורת Java

תת-סעיף זה יראה כמה קל להגדיר את תצורת Ehcache עם POJOs. כמו כן, ניצור מחלקה עוזרת לתצורה קלה יותר וזמינות המטמון:

מחלקה ציבורית CacheHelper {CacheManager private cacheManager; מטמון פרטי מרובע מספר מספר מטמון; ציבור CacheHelper () {cacheManager = CacheManagerBuilder .newCacheManagerBuilder (). build (); cacheManager.init (); squareNumberCache = cacheManager .createCache ("squaredNumber", CacheConfigurationBuilder .newCacheConfigurationBuilder (Integer.class, Integer.class, ResourcePoolsBuilder.heap (10))); } מטמון ציבורי getSquareNumberCacheFromCacheManager () {return cacheManager.getCache ("squaredNumber", Integer.class, Integer.class); } // גטרים וקובעים סטנדרטיים}

כדי לאתחל את המטמון, ראשית עלינו להגדיר את Ehcache CacheManager לְהִתְנַגֵד. בדוגמה זו, אנו יוצרים מטמון ברירת מחדל squaredNumber ” עם ה newCacheManagerBuilder () ממשק API.

המטמון פשוט יתמפה מספר שלם מפתחות ל מספר שלם ערכים.

שימו לב איך לפני שאנחנו מתחילים להשתמש במטמון שהוגדר, עלינו לאתחל את ה- CacheManager חפץ עם init () שיטה.

לבסוף, כדי להשיג את המטמון שלנו, אנחנו יכולים פשוט להשתמש ב- getCache () ממשק API עם השם, המפתחות וסוגי הערך של המטמון שלנו.

עם כמה שורות אלה, יצרנו את המטמון הראשון שלנו אשר זמין כעת ליישום שלנו.

3.2. תצורת XML

אובייקט התצורה מסעיף קטן 3.1. שווה לשימוש בתצורת XML זו:

 java.lang.Integer java.lang.Integer 10 

וכדי לכלול את המטמון הזה ביישום Java שלנו, עלינו לקרוא את קובץ התצורה של XML ב- Java:

כתובת אתר myUrl = getClass (). GetResource (xmlFile); XmlConfiguration xmlConfig = XmlConfiguration חדש (myUrl); CacheManager myCacheManager = CacheManagerBuilder .newCacheManager (xmlConfig);

4. מבחן Ehcache

בסעיף 3. הראינו כיצד ניתן להגדיר מטמון פשוט למטרותיך. כדי להראות שמטמון למעשה עובד, ניצור SquaredCalculator מחלקה שתחשב את הערך בריבוע של הקלט שסופק ותאחסן את הערך המחושב במטמון.

כמובן שאם המטמון כבר מכיל ערך מחושב, נחזיר ערך מטמון ונמנע מחישובים מיותרים:

מחלקה ציבורית SquaredCalculator {מטמון CacheHelper פרטי; public int getSquareValueOfNumber (קלט int) {if (cache.getSquareNumberCache (). containKey (input)) {return cache.getSquareNumberCache (). get (input); } System.out.println ("חישוב ערך מרובע של" + קלט + "ותוצאת מטמון."); int squaredValue = (int) Math.pow (קלט, 2); cache.getSquareNumberCache (). put (קלט, squaredValue); החזר בריבוע ערך; } // גטרים וקובעים סטנדרטיים; }

כדי להשלים את תרחיש הבדיקה, נצטרך גם את הקוד שיחשב ערכים מרובעים:

@Test הציבור בטל כאשרCalculatingSquareValueAgain_thenCacheHasAllValues ​​() {for (int i = 10; i <15; i ++) {assertFalse (cacheHelper.getSquareNumberCache (). ContainKey (i)); System.out.println ("הערך המרובע של" + i + "הוא:" + squaredCalculator.getSquareValueOfNumber (i) + "\ n"); } עבור (int i = 10; i <15; i ++) {assertTrue (cacheHelper.getSquareNumberCache (). containKey (i)); System.out.println ("הערך המרובע של" + i + "הוא:" + squaredCalculator.getSquareValueOfNumber (i) + "\ n"); }}

אם נבצע את הבדיקה שלנו, נקבל את התוצאה הזו במסוף שלנו:

חישוב ערך מרובע של 10 ותוצאת מטמון. הערך הריבועי של 10 הוא: 100 חישוב הערך הריבועי של 11 ותוצאת המטמון. הערך הריבועי של 11 הוא: 121 חישוב הערך הריבועי של 12 ותוצאת המטמון. הערך הריבועי של 12 הוא: 144 חישוב הערך הריבועי של 13 ותוצאת המטמון. הערך הריבועי של 13 הוא: 169 חישוב הערך הריבועי של 14 ותוצאת המטמון. ערך ריבוע של 14 הוא: 196 ערך ריבוע של 10 הוא: 100 ערך ריבוע של 11 הוא: 121 ערך ריבוע של 12 הוא: 144 ערך ריבוע של 13 הוא: 169 ערך ריבוע של 14 הוא: 196

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

5. אפשרויות תצורה אחרות של Ehcache

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

5.1. התמדה בדיסק

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

PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder () .with (CacheManagerBuilder.persistence (getStoragePath () + File.separator + "squaredValue")) .withCache ("מטמון מתמשך", CacheConfiguration .newResourcePoolsBuilder () .heap (10, EntryUnit.ENTRIES) .disk (10, MemoryUnit.MB, נכון))) .build (true); persistentCacheManager.close ();

במקום ברירת מחדל CacheManager, אנו משתמשים כעת PersistentCacheManager אשר יתמיד בכל הערכים שלא ניתן לשמור בזיכרון.

מהתצורה אנו יכולים לראות שמטמון ישמור 10 אלמנטים בזיכרון והוא יקצה 10MB בכונן הקשיח להתמדה.

5.2. תפוגת נתונים

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

Ehcache שולט על שוקת טריות הנתונים תְפוּגָה מִמְשָׁק:

CacheConfiguration cacheConfiguration = CacheConfigurationBuilder .newCacheConfigurationBuilder (Integer.class, Integer.class, ResourcePoolsBuilder.heap (100)) .withExpiry (Expirations.timeToLiveExpiration (Duration.of (60, TimeUnit.SECONDS)).

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

6. מסקנה

במאמר זה הראינו כיצד להשתמש במטמון Ehcache פשוט ביישום Java.

בדוגמה שלנו ראינו שאפילו מטמון שהוגדר בפשטות יכול לחסוך הרבה פעולות מיותרות. כמו כן, הראינו שאנו יכולים להגדיר מטמונים באמצעות POJOs ו- XML ​​וכי ל- Ehcache יש כמה תכונות נחמדות - כגון התמדה ותפקע נתונים.

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


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