Memorystore for Redis là một dịch vụ Redis được quản lý toàn diện 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, tính khả dụng và tính bảo mật cao mà không phải chịu gánh nặng quản lý các hoạt động triển khai Redis phức tạp. Bạn có thể dùng Redis làm một phần phụ trợ để lưu dữ liệu vào bộ nhớ đệm nhằm cải thiện hiệu suất của các ứng dụng Spring Boot. Lớp học lập trình này giải thích cách thiết lập.
Kiến thức bạn sẽ học được
- Cách sử dụng Memorystore làm phụ trợ bộ nhớ đệm cho ứng dụng Spring Boot.
Bạn cần có
- Một dự án trên Google Cloud
- Một trình duyệt, chẳng hạn như Google Chrome
- Làm quen với các trình chỉnh sửa văn bản tiêu chuẩn của Linux, chẳng hạn như Vim, Emacs và GNU Nano
Bạn sẽ sử dụng lớp học lập trình này như thế nào?
Bạn đánh giá thế nào về trải nghiệm của mình khi sử dụng các dịch vụ của Google Cloud?
Thiết lập môi trường theo tốc độ của riêng bạn
Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển Google Cloud Platform (console.cloud.google.com) rồi tạo một dự án mới:
Hãy nhớ mã dự án, một tên duy nhất trong tất cả các dự án trên Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động đối với bạn, xin lỗi!). Sau này trong lớp học lập trình này, chúng ta sẽ gọi nó là PROJECT_ID
.
Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.
Việc thực hiện lớp học lập trình này sẽ không tốn của bạn quá vài đô la, nhưng có thể tốn nhiều 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 đó chạy (xem phần "dọn dẹp" ở 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ử miễn phí 300 USD.
Kích hoạt Google Cloud Shell
Trên 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 đó, hãy nhấp vào "Start Cloud Shell" (Bắt đầu Cloud Shell):
Quá trình cung cấp và kết nối với môi trường chỉ mất vài phút:
Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là tất cả, công việc trong phòng thí nghiệm này 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 mình đã được xác thực và dự án đã được đặt thành PROJECT_ID.
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 của lệnh
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu không, bạn có thể đặt nó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra của lệnh
Updated property [core/project].
Khởi động Cloud Shell.
Sau khi Cloud Shell khởi động, bạn có thể dùng dòng lệnh để tạo một phiên bản Memorystore mới.
$ gcloud redis instances create myinstance --size=1 --region=us-central1
Nếu chưa bật Memorystore API, thì bạn sẽ được hỏi xem bạn 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 hoàn tất thao tác, bạn có thể sử dụng phiên bản của mình.
Lấy địa chỉ IP máy chủ lưu trữ redis của phiên bản bằng cách chạy lệnh sau. Bạn sẽ sử dụng lại khoá 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 Bộ nhớ > Memorystore trong Google Cloud Console, bạn sẽ thấy phiên bản của mình ở trạng thái "sẵn sàng":
Tạo một phiên bản Compute Engine ở cùng khu vực.
$ gcloud compute instances create instance-1 --zone us-central1-c
Sau khi hoàn tất thao tác, bạn có thể sử dụng phiên bản của mình.
Kết nối với phiên bản của bạn qua SSH bằng cách chuyển đến Compute > Compute Engine > VM instances (Phiên bản máy ảo), rồi nhấp vào SSH trong cột Connect (Kết nối):
Trong trình bao của 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 một dự án Spring Boot mới có các phần phụ thuộc web
, redis
và cache
:
$ 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 sử dụng địa chỉ IP của phiên bản Memorystore cho máy chủ lưu trữ Redis.
$ nano src/main/resources/application.properties
Thêm dòng sau đây bằng địa chỉ IP Memorystore cho Redis (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 trình điều khiển REST:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Đưa 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ú giải @RequestMapping
hiển thị phương thức dưới dạng một điểm cuối HTTP và ánh xạ một phần của đường dẫn đến một tham số phương thức (như được chỉ ra bằng chú giải @PathVariable
).
Chú thích @Cacheable("hello")
cho biết quá trình thực thi phương thức phải được lưu vào bộ nhớ đệm và tên bộ nhớ đệm là "hello
". Chú thích này được dùng kết hợp với giá trị tham số làm khoá bộ nhớ đệm. Bạn sẽ thấy ví dụ về việc này ở phần sau của lớp học lập trình.
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ú giải lớp bằng chú giải 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); } }
Giờ thì 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 theo cách mà 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, truyền "bob
" làm 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
Lưu ý rằng lần đầu tiên yêu cầu mất 5 giây, nhưng lần tiếp theo nhanh hơn đáng kể mặc dù bạn có lệnh gọi Thread.sleep(5000)
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 đều trả về kết quả trực tiếp từ bộ nhớ đệm.
Bạn có thể xem chính xác nội dung mà ứ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ủ lưu trữ Memorystore cho Redis bằng telnet:
$ telnet <memorystore-host-ip-address> 6379
Để xem danh sách các khoá lưu vào bộ nhớ đệm, hãy 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ố cho khoá và giá trị tham 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!
Sử dụng lệnh QUIT
để thoát.
Để dọn dẹp, hãy xoá các phiên bản Compute Engine và Memorystore khỏi Cloud Shell.
Xoá phiên bản điện toán:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Xoá phiên bản Memorystore for 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 một ứng dụng Spring Boot để sử dụng Memorystore với tính năng lưu vào bộ nhớ đệm Spring Boot!
Tìm hiểu thêm
- Lưu vào bộ nhớ đệm Spring Boot
- Memorystore
- Dự án Spring trên Google Cloud
- Kho lưu trữ GitHub của Spring trên Google Cloud
- Java trên Google Cloud
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả theo Creative Commons 2.0.