1. סקירה כללית
Memorystore for Redis הוא שירות Redis מנוהל באופן מלא ל-Google Cloud. שימוש בשירות Redis המאובטח, הזמין והניתן להתאמה לעומס, כדי להגיע לביצועי שיא באפליקציות שמריצים ב-Google Cloud, בלי שתצטרכו לנהל בעצמכם פריסות מורכבות של Redis. אפשר להשתמש בו כבק-אנד לאחסון נתונים במטמון כדי לשפר את הביצועים של אפליקציות Spring Boot. ב-codelab מוסבר איך להגדיר את התכונה.
מה תלמדו
- איך משתמשים ב-Memorystore כבק-אנד של מטמון לאפליקציית Spring Boot.
מה תצטרכו
- פרויקט ב-Google Cloud
- דפדפן, כמו Google Chrome
- היכרות עם כלים לעריכת טקסט של Linux, כמו Vim, Emacs ו-GNU Nano
איך תשתמשו ב-codelab?
איזה דירוג מתאים לדעתך לחוויית השימוש שלך בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, אתם צריכים ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
הפעלת Cloud Shell
- ב-Cloud Console, לוחצים על Activate Cloud Shell
.
אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (בחלק הנגלל) עם תיאור של Cloud Shell. במקרה כזה, לוחצים על המשך (והמסך הזה לא יוצג לכם יותר). כך נראה המסך החד-פעמי:
הקצאת המשאבים והחיבור ל-Cloud Shell נמשכים רק כמה רגעים.
המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את רוב העבודה ב-codelab הזה, אם לא את כולה, באמצעות דפדפן או Chromebook.
אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות שכבר בוצע ושהפרויקט כבר הוגדר לפי מזהה הפרויקט.
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שעברתם אימות:
gcloud auth list
פלט הפקודה
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם לא, אפשר להגדיר אותו באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
3. הגדרה של מכונת Memorystore for Redis
מפעילים את Cloud Shell.
אחרי שמפעילים את Cloud Shell, משתמשים בשורת הפקודה כדי להפעיל את Memorystore API וליצור מופע חדש של Memorystore.
$ gcloud services enable redis.googleapis.com $ gcloud redis instances create myinstance --size=1 --region=us-central1
אחרי שהפעולה תסתיים, תוכלו להשתמש במופע.
מריצים את הפקודה הבאה כדי לקבל את כתובת ה-IP של מארח redis של המופע. תשתמשו בו שוב בהמשך כשתיצרו את אפליקציית Spring Boot.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
ב-Google Cloud Console, עוברים אל Databases (מסדי נתונים) > Memorystore > Redis. המכונה שלכם צריכה להיות במצב 'מוכן':

4. הגדרת מכונה של Compute Engine
יוצרים מכונה של Compute Engine באותו אזור.
$ gcloud compute instances create instance-1 --zone us-central1-c
אחרי שהפעולה תסתיים, תוכלו להשתמש במופע.
מתחברים למכונה באמצעות SSH עם הפקודה הבאה:
$ gcloud compute ssh instance-1 --zone us-central1-c
לחלופין, אפשר לנווט אל Compute > Compute Engine > VM instances וללחוץ על SSH בעמודה Connect:

במעטפת של המכונה הווירטואלית (VM) (לא ב-Cloud Shell), מתקינים את OpenJDK, Maven וכלי Redis:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
מחכים שההתקנה תסתיים ואז ממשיכים לשלב הבא.
5. הגדרת אפליקציית Spring Boot
יוצרים פרויקט חדש של Spring Boot עם יחסי התלות web, redis ו-cache:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,redis,cache -d language=java -d baseDir=cache-app \ -d type=maven-project \ | tar -xzvf - && cd cache-app
עורכים את הקובץ application.properties כדי להגדיר את האפליקציה כך שתשתמש בכתובת ה-IP של מכונת Memorystore למארח Redis.
$ nano src/main/resources/application.properties
מוסיפים את השורה הבאה עם כתובת ה-IP של Memorystore for Redis (מהשלבים הקודמים):
spring.data.redis.host=<memorystore-host-ip-address>
מוסיפים שורה חדשה אחרי זה ויוצרים מחלקת Java של בקר REST:
$ nano src/main/java/com/example/demo/HelloWorldController.java
מכניסים את התוכן הבא לקובץ:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@Autowired
private StringRedisTemplate template;
@RequestMapping("/hello/{name}")
@Cacheable("hello")
public String hello(@PathVariable String name) throws InterruptedException {
Thread.sleep(5000);
return "Hello " + name;
}
}
ההערה @RequestMapping חושפת את השיטה כנקודת קצה של HTTP וממפה חלק מהנתיב לפרמטר של שיטה (כפי שמצוין בהערה @PathVariable).
ההערה @Cacheable("hello") מציינת שצריך לשמור במטמון את הביצוע של המתודה, וששם המטמון הוא hello. היא משמשת בשילוב עם ערך הפרמטר כמפתח מטמון. בהמשך ה-Code Lab תראו דוגמה.
בשלב הבא, נפעיל שמירה במטמון בכיתת האפליקציה Spring Boot. עריכה של DemoApplication.java:
$ nano src/main/java/com/example/demo/DemoApplication.java
ייבוא org.springframework.cache.annotation.EnableCaching והוספת הערה לכיתה עם ההערה הזו. התוצאה אמורה להיראות כך:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
6. מריצים את האפליקציה וניגשים לנקודת הקצה
מוודאים שהמכשיר JAVA_HOME מוגדר לגרסה הנכונה:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
עכשיו אפשר להפעיל את האפליקציה.
$ mvn spring-boot:run
פותחים חיבור SSH נוסף למכונה באותו אופן שבו עשיתם זאת קודם. בחלון ה-SSH החדש, ניגשים לנקודת הקצה /hello/ כמה פעמים, ומעבירים את הערך bob בתור שם.
$ time curl http://localhost:8080/hello/bob Hello bob! real 0m5.408s user 0m0.036s sys 0m0.009s $ time curl http://localhost:8080/hello/bob Hello bob! real 0m0.092s user 0m0.021s sys 0m0.027s
שימו לב שבפעם הראשונה הבקשה נמשכה חמש שניות, אבל בפעם הבאה היא הייתה מהירה משמעותית, למרות שהייתה Thread.sleep(5000)הפעלה בשיטה. הסיבה לכך היא שהשיטה בפועל הופעלה רק פעם אחת והתוצאה הוכנסה למטמון. כל קריאה עוקבת מחזירה את התוצאה ישירות מהמטמון.
7. בדיקת אובייקטים שנשמרו במטמון
אתם יכולים לראות בדיוק מה נשמר במטמון של האפליקציה. באותו טרמינל שבו השתמשתם בשלב הקודם, מתחברים למארח Memorystore for Redis באמצעות redis-cli:
$ redis-cli -h <memorystore-host-ip-address>
כדי לראות את רשימת מפתחות הזיכרון, משתמשים בפקודה הבאה:
:6379> KEYS * 1) "hello::bob"
כפי שאפשר לראות, שם המטמון משמש כקידומת למפתח, וערך הפרמטר משמש כחלק השני.
כדי לאחזר את הערך, משתמשים בפקודה GET:
:6379> GET hello::bob Hello bob!
משתמשים בפקודה exit כדי לצאת.
8. הסרת המשאבים
כדי לנקות, מוחקים את המופעים של Compute Engine ו-Memorystore מ-Cloud Shell.
מוחקים את מכונת ה-Compute:
$ gcloud compute instances delete instance-1 --zone us-central1-c
מוחקים את מכונת Memorystore for Redis:
$ gcloud redis instances delete myinstance --region=us-central1
9. מעולה!
יצרתם Memorystore for Redis ומכונה של Compute Engine. בנוסף, הגדרתם אפליקציית Spring Boot לשימוש ב-Memorystore עם Spring Boot caching.
מידע נוסף
רישיון
עבודה זו מורשית תחת רישיון Creative Commons שמותנה בייחוס 2.0 כללי.