Lưu dữ liệu vào bộ nhớ đệm từ ứng dụng Spring Boot bằng Memorystore

Storagestore for Redis là dịch vụ Redis được quản lý hoàn toàn dành cho Google Cloud. Các ứng dụng chạy trên Google Cloud có thể đạt được hiệu suất cực cao bằng cách tận dụng dịch vụ Redis có khả năng mở rộng lớn, có sẵn và bảo mật mà không phải quản lý việc triển khai Redis phức tạp. Bạn có thể dùng ứng dụng này làm phụ trợ cho việc lưu dữ liệu vào bộ nhớ đệm để cải thiện hiệu suất của ứng dụng Spring Boot. Lớp học lập trình giải thích cách thiết lập lớp học.

Kiến thức bạn sẽ học được

  • Cách dùng Bộ nhớ lưu trữ làm phụ trợ bộ nhớ đệm cho ứng dụng Khởi động mùa xuân.

Bạn cần có

  • Một dự án Google Cloud
  • Một trình duyệt, chẳng hạn như Google Chrome
  • Quen thuộc với các trình chỉnh sửa văn bản Linux tiêu chuẩn, chẳng hạn như Vim, Emacs và GNU nano

Bạn sẽ sử dụng lớp học lập trình như thế nào?

Chỉ đọc Đọc và hoàn thành các bài tập

Bạn đánh giá trải nghiệm của mình với các dịch vụ của Google Cloud như thế nào?

Công ty Trung cấp Đặc biệt

Thiết lập môi trường theo tiến độ riêng

Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), thì bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển của Google Cloud Platform (console.cloud.google.com) và tạo một dự án mới:

Ảnh chụp màn hình từ 2016-02-10 12:45:26.png

Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID.

Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.

Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó hoạt động (xem "cleanup" ở cuối tài liệu này).

Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử 300 đô la dùng thử miễn phí.

Kích hoạt Google Cloud Shell

Từ bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ trên cùng bên phải:

Sau đó nhấp vào "Start Cloud Shell":

Bạn chỉ cần dành vài phút để cấp phép và kết nối với môi trường:

Máy ảo này được tải bằng tất cả các công cụ phát triển mà bạn cần. cung cấp một thư mục gốc 5GB cố định và chạy trên Google Cloud, qua đó nâng cao đáng kể hiệu suất và khả năng xác thực mạng. Phần lớn công việc của bạn trong phòng thí nghiệm này có thể thực hiện chỉ bằng một trình duyệt hoặc Google Chromebook.

Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng bạn đã được xác thực và dự án này đã được đặt thành PROJECT_ID của bạn.

Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:

gcloud auth list

Đầu ra lệnh

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Đầu ra lệnh

[core]
project = <PROJECT_ID>

Nếu chưa, bạn có thể đặt lệnh đó bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Đầu ra lệnh

Updated property [core/project].

Khởi động Cloud Shell.

Sau khi Cloud Shell khởi chạy, bạn có thể sử dụng dòng lệnh để tạo một thực thể mới của Memorystore.

$ gcloud redis instances create myinstance --size=1 --region=us-central1

Nếu API Memorystore chưa được bật, bạn sẽ được hỏi xem có muốn bật API này hay không. Trả lời y.

API [redis.googleapis.com] not enabled on project [204466653457].
Would you like to enable and retry (this will take a few minutes)?
(y/N)?  y
Enabling service redis.googleapis.com on project 204166153457...
Waiting for async operation operations/tmo-acf.c8909997-1b4e-1a62-b6f5-7da75cce1416 to complete...
Operation finished successfully. The following command can describe the Operation details:
 gcloud services operations describe operations/tmo-acf.c8909997-1b4e-1a62-b6f5-7da75cce1416
Create request issued for: [myinstance]
Waiting for operation [operation-1538645026454-57763b937ad39-2564ab37-3fea7701] to complete...done.
Created instance [myinstance].

Sau khi thao tác này hoàn tất, bản sao của bạn sẽ sẵn sàng để sử dụng.

Lấy redishost ip-address của thực thể bằng cách chạy lệnh sau. Bạn sẽ sử dụng lại ứng dụng này sau khi định cấu hình ứng dụng Spring Boot.

$ gcloud redis instances describe myinstance --region=us-central1 \
  | grep host
host: 10.0.0.4

Nếu chuyển đến Storage (Bộ nhớ) và gt; Memorystore trong Google Cloud Console, thì bạn có thể xem phiên bản của mình ở "Ready" status :

Tạo một phiên bản Compute Engine trong cùng một khu vực.

$ gcloud compute instances create instance-1 --zone us-central1-c

Sau khi thao tác này hoàn tất, bản sao của bạn sẽ sẵn sàng để sử dụng.

Kết nối với thực thể của bạn qua SSH bằng cách chuyển đến Compute > Compute Engine > VMVM rồi nhấp vào SSH trong cột Connect:

Trong vỏ phiên bản máy ảo (VM) (không phải Cloud Shell), hãy cài đặt OpenJDK, Maven, telnet:

$ sudo apt-get install openjdk-8-jdk-headless maven telnet

Vui lòng chờ quá trình cài đặt hoàn tất rồi chuyển sang bước tiếp theo.

Tạo dự án Spring Spring mới với các phần phụ thuộc web, rediscache:

$ curl https://start.spring.io/starter.tgz \
  -d dependencies=web,redis,cache -d language=java -d baseDir=cache-app \
  | tar -xzvf - && cd cache-app

Chỉnh sửa tệp application.properties để định cấu hình ứng dụng dùng địa chỉ IP của phiên bản Memorystore cho máy chủ Redis.

$ nano src/main/resources/application.properties

Thêm dòng sau cùng với Memorystore cho Redis địa chỉ IP (từ một vài bước trước):

spring.redis.host=<memorystore-host-ip-address> 

Thêm một dòng mới sau đó và tạo một lớp Java của bộ điều khiển REST:

$ nano src/main/java/com/example/demo/HelloWorldController.java

Đặt nội dung sau vào tệp:

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;
 }
}

Chú thích @RequestMapping sẽ hiển thị phương thức này dưới dạng điểm cuối HTTP và ánh xạ một phần đường dẫn đến thông số phương thức (như được chú thích bằng @PathVariable).

Chú thích @Cacheable("hello") cho biết rằng quá trình thực thi phương thức này phải được lưu vào bộ nhớ đệm và tên bộ nhớ đệm là "hello." Nó sẽ được sử dụng kết hợp với giá trị thông số làm khóa bộ nhớ đệm. Bạn sẽ thấy một ví dụ sau đó trong phòng thí nghiệm mã.

Ngoài ra, bạn cần bật tính năng lưu vào bộ nhớ đệm trong lớp ứng dụng Spring Boot.

Chỉnh sửa DemoApplication.java:

$ nano src/main/java/com/example/demo/DemoApplication.java

Nhập org.springframework.cache.annotation.EnableCaching và chú thích lớp học bằng chú thích này. Kết quả sẽ có dạng như sau:

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);
 }
}

Bây giờ, bạn đã sẵn sàng để chạy ứng dụng!

$ mvn spring-boot:run

Mở một kết nối SSH khác đến phiên bản của bạn giống như cách bạn đã làm trước đó. Trong cửa sổ SSH mới, hãy truy cập vào điểm cuối /hello/ nhiều lần, chuyển "bob" dưới dạng tên.

$ 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

Xin lưu ý rằng lần đầu tiên yêu cầu mất 5 giây, nhưng yêu cầu tiếp theo nhanh hơn đáng kể mặc dù bạn có Thread.sleep(5000)yêu cầu trong phương thức. Đó là vì phương thức thực tế chỉ được thực thi một lần và kết quả đã được đưa vào bộ nhớ đệm. Mỗi lệnh gọi tiếp theo sẽ trả về kết quả ngay từ bộ nhớ đệm.

Bạn thực sự có thể xem chính xác những gì ứng dụng đã lưu vào bộ nhớ đệm. Từ cùng một thiết bị đầu cuối mà bạn đã sử dụng ở bước trước, hãy kết nối với máy chủ Redis cho máy chủ Redis bằng telnet:

$ telnet <memorystore-host-ip-address> 6379

Để xem danh sách khóa bộ nhớ đệm, hãy sử dụng lệnh sau:

KEYS *
hello::bob

Như bạn có thể thấy, tên bộ nhớ đệm được dùng làm tiền tố của khóa và giá trị thông số được dùng làm phần thứ hai.

Để truy xuất giá trị, hãy dùng lệnh GET:

$ GET hello::bob
   Hello bob!

Hãy dùng lệnh QUIT để thoát.

Để dọn dẹp, hãy xóa các phiên bản Compute Engine và Memorystore khỏi Cloud Shell.

Xóa thực thể điện toán:

$ gcloud compute instances delete instance-1 --zone us-central1-c

Xóa kho lưu trữ Bộ nhớ cho Redis:

$ gcloud redis instances delete myinstance --region=us-central1

Bạn đã tạo Memorystore cho Redis và một phiên bản Compute Engine. Ngoài ra, bạn đã định cấu hình ứng dụng Spring Boot để sử dụng Memorystore với tính năng Lưu vào bộ nhớ đệm mùa xuân!

Tìm hiểu thêm

Giấy phép

Tài liệu này được cấp phép theo Giấy phép chung Creative Commons 2.0.