1. סקירה כללית
Memorystore for Redis הוא שירות Redis מנוהל באופן מלא ל-Google Cloud. שימוש בשירות Redis המאובטח, הזמין והניתן להתאמה לעומס, כדי להגיע לביצועי שיא באפליקציות שמריצים ב-Google Cloud, בלי שתצטרכו לנהל בעצמכם פריסות מורכבות של Redis. אפשר להשתמש בו כקצה עורפי (backend) לאחסון נתונים במטמון כדי לשפר את הביצועים של אפליקציות 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 USD.
הפעלת 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, עוברים אל 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. היא משמשת בשילוב עם ערך הפרמטר כמפתח מטמון. בהמשך הסדנה יוצג קוד לדוגמה.
בשלב הבא, נפעיל שמירת נתונים במטמון בכיתת האפליקציה 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.
מוחקים את מכונת החישוב:
$ 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.
מידע נוסף
רישיון
העבודה הזו בשימוש במסגרת רישיון Creative Commons שמותנה בייחוס כללי מגרסה 2.0.