1. 總覽
Memorystore for Redis 是適用於 Google Cloud 的全代管 Redis 服務。透過運用高擴充性、高可用性和安全的 Redis 服務,您無須費心管理複雜的 Redis 部署作業,即可讓 Google Cloud 上執行的應用程式得以發揮最佳效能。可用於資料快取後端,提升 Spring Boot 應用程式的效能。程式碼研究室會說明如何設定。
課程內容
- 瞭解如何將 Memorystore 做為 Spring Boot 應用程式的快取後端。
軟硬體需求
- 具備 Google Cloud 專案
- 瀏覽器,例如 Google Chrome
- 熟悉標準 Linux 文字編輯器,例如 Vim、Emacs 和 GNU Nano
您會如何使用這個程式碼研究室?
你對 Google Cloud 服務的體驗滿意嗎?
2. 設定和需求
自修實驗室環境設定
請記住專案 ID,這是所有 Google Cloud 專案中不重複的名稱 (上述名稱已遭占用,因此不適用於您,抱歉!)。本程式碼研究室稍後會將其稱為 PROJECT_ID。
- 接著,您必須在 Cloud 控制台中啟用帳單,才能使用 Google Cloud 資源。
完成本程式碼研究室的費用應該不高,甚至完全免費。請務必按照「清除」部分的指示操作,瞭解如何停用資源,避免在本教學課程結束後繼續產生帳單費用。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
啟用 Cloud Shell
- 在 Cloud 控制台,點選「啟用 Cloud Shell」 圖示
。
如果您是首次啟動 Cloud Shell,系統會顯示中繼畫面 (摺疊式螢幕下方),說明這個指令列環境。點選「繼續」後,這則訊息日後就不會再出現。以下是這個初次畫面的樣子:
佈建並連至 Cloud Shell 預計只需要幾分鐘。
這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本程式碼研究室幾乎所有工作都可在瀏覽器或 Chromebook 上完成。
連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。
- 在 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
作業完成後,您就可以使用執行個體。
執行下列指令,取得執行個體的 redis 主機 IP 位址。稍後設定 Spring Boot 應用程式時,您會再次使用這個值。
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
在 Google Cloud 控制台中,依序前往「資料庫」 >「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」(VM 執行個體) ,然後點選「Connect」(連線) 欄中的「SSH」:

在虛擬機器 (VM) 執行個體殼層 (而非 Cloud Shell) 中,安裝 OpenJDK、Maven 和 Redis 工具:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
等待安裝完成,然後繼續下一個步驟。
5. 設定 Spring Boot 應用程式
使用 web 建立新的 Spring Boot 專案,並加入 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 檔案,將應用程式設定為使用 Memorystore 執行個體的 IP 位址做為 Redis 主機。
$ nano src/main/resources/application.properties
新增下列行,並填入 Memorystore for Redis IP 位址 (來自前幾個步驟):
spring.data.redis.host=<memorystore-host-ip-address>
在該行之後新增一行,然後建立 REST 控制器 Java 類別:
$ 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)invocation。這是因為實際方法只執行一次,結果會放入快取中。後續每次呼叫都會直接從快取傳回結果。
7. 查看快取物件
您可實際查看應用程式快取的內容。在您於上一個步驟中使用的相同終端機,使用 redis-cli 連線至 Memorystore for Redis 主機:
$ redis-cli -h <memorystore-host-ip-address>
如要查看快取鍵清單,請使用下列指令:
:6379> KEYS * 1) "hello::bob"
如您所見,快取名稱會做為索引鍵的前置字元,參數值則會做為第二部分。
如要擷取值,請使用 GET 指令:
:6379> GET hello::bob Hello bob!
使用 exit 指令結束。
8. 清理
如要清理,請從 Cloud Shell 刪除 Compute Engine 和 Memorystore 執行個體。
刪除運算執行個體:
$ 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 應用程式,透過 Spring Boot 快取使用 Memorystore!
瞭解詳情
授權
這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。