Meng-cache data dari aplikasi Spring Boot dengan Memorystore

1. Ringkasan

Memorystore for Redis adalah layanan Redis yang terkelola sepenuhnya untuk Google Cloud. Aplikasi yang berjalan di Google Cloud dapat mencapai performa ekstrem dengan memanfaatkan layanan Redis yang sangat skalabel, tersedia, dan aman tanpa beban mengelola deployment Redis yang kompleks. Ini dapat digunakan sebagai backend untuk caching data guna meningkatkan performa aplikasi Spring Boot. Codelab ini menjelaskan cara menyiapkannya.

Yang akan Anda pelajari

  • Cara menggunakan Memorystore sebagai backend cache untuk aplikasi Spring Boot.

Yang Anda butuhkan

  • Project Google Cloud
  • Browser, seperti Google Chrome
  • Pemahaman tentang editor teks Linux standar seperti Vim, Emacs, dan GNU Nano

Bagaimana Anda akan menggunakan codelab?

Hanya baca Membaca dan menyelesaikan latihan

Bagaimana Anda menilai pengalaman Anda dengan layanan Google Cloud?

Pemula Menengah Mahir

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. (Jika belum memiliki akun Gmail atau G Suite, Anda harus membuatnya.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID.

  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.

Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mengaktifkan Cloud Shell

  1. Dari Cloud Console, klik Aktifkan Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Jika belum pernah memulai Cloud Shell, Anda akan melihat layar perantara (di paruh bawah) yang menjelaskan apa itu Cloud Shell. Jika demikian, klik Lanjutkan (dan Anda tidak akan pernah melihatnya lagi). Berikut tampilan layar sekali-tampil tersebut:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan hanya dengan browser atau Chromebook.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda.

  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list

Output perintah

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

3. Menyiapkan instance Memorystore for Redis

Mulai Cloud Shell

Setelah Cloud Shell diluncurkan, gunakan command line untuk mengaktifkan Memorystore API dan membuat instance Memorystore baru.

$ gcloud services enable redis.googleapis.com
$ gcloud redis instances create myinstance --size=1 --region=us-central1

Setelah operasi selesai, instance Anda akan siap digunakan.

Dapatkan redis host ip-address instance dengan menjalankan perintah berikut. Anda akan menggunakannya lagi nanti saat mengonfigurasi aplikasi Spring Boot.

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

Di Konsol Google Cloud, buka Databases > Memorystore > Redis. Instance Anda sudah berada dalam status "siap" negara bagian :

ee90b43f15a6dc1f.png

4. Menyiapkan instance Compute Engine

Membuat instance Compute Engine di region yang sama.

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

Setelah operasi selesai, instance Anda akan siap digunakan.

Hubungkan ke instance Anda melalui SSH dengan perintah berikut:

$ gcloud compute ssh instance-1 --zone us-central1-c

Atau, buka Compute > Compute Engine > Instance VM, lalu klik SSH di kolom Hubungkan:

a87bd437a0c8c7b4.png

Di shell instance virtual machine (VM) (bukan Cloud Shell), instal alat OpenJDK, Maven, dan Redis:

$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools

Tunggu hingga penginstalan selesai, lalu lanjutkan ke langkah berikutnya.

5. Menyiapkan aplikasi Spring Boot

Buat project Spring Boot baru dengan dependensi web, redis, dan 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

Edit file application.properties untuk mengonfigurasi aplikasi agar menggunakan alamat IP instance Memorystore untuk host Redis.

$ nano src/main/resources/application.properties

Tambahkan baris berikut dengan alamat IP Memorystore for Redis Anda (dari beberapa langkah sebelumnya):

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

Tambahkan baris baru setelahnya dan buat class Java pengontrol REST:

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

Masukkan konten berikut ke dalam file:

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

Anotasi @RequestMapping mengekspos metode sebagai endpoint HTTP dan memetakan bagian jalur ke parameter metode (seperti yang ditunjukkan oleh anotasi @PathVariable).

Anotasi @Cacheable("hello") menunjukkan bahwa eksekusi metode harus di-cache dan nama cache-nya adalah "hello". Kunci ini digunakan bersama dengan nilai parameter sebagai kunci cache. Anda akan melihat contohnya nanti di codelab.

Selanjutnya, kita akan mengaktifkan caching di class aplikasi Spring Boot. Edit DemoApplication.java:

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

Impor org.springframework.cache.annotation.EnableCaching dan anotasikan class dengan anotasi ini. Hasilnya akan terlihat seperti ini:

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. Menjalankan aplikasi dan mengakses endpoint

Pastikan, JAVA_HOME ditetapkan ke versi yang tepat:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

Sekarang Anda siap untuk menjalankan aplikasi.

$ mvn spring-boot:run

Buka koneksi SSH lain ke instance Anda dengan cara yang sama seperti sebelumnya. Di jendela SSH baru, akses endpoint /hello/ beberapa kali, dengan meneruskan "bob" sebagai nama.

$ 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

Perhatikan bahwa saat pertama kali permintaan memerlukan waktu lima detik, permintaan berikutnya jauh lebih cepat meskipun Anda telah melakukan pemanggilan Thread.sleep(5000) dalam metode ini. Itu karena metode aktual hanya dieksekusi satu kali dan hasilnya dimasukkan ke dalam {i>cache<i}. Setiap panggilan berikutnya menampilkan hasil langsung dari cache.

7. Tinjau objek yang di-cache

Anda dapat melihat secara persis apa yang di-cache aplikasi. Dari terminal yang sama dengan yang Anda gunakan pada langkah sebelumnya, hubungkan ke host Memorystore for Redis menggunakan redis-cli:

$ redis-cli -h <memorystore-host-ip-address>

Untuk melihat daftar kunci cache, gunakan perintah berikut:

:6379> KEYS *
1) "hello::bob"

Seperti yang dapat Anda lihat, nama cache digunakan sebagai awalan untuk kunci dan nilai parameter digunakan sebagai bagian kedua.

Untuk mengambil nilai, gunakan perintah GET:

:6379> GET hello::bob
   Hello bob!

Gunakan perintah exit untuk keluar.

8. Pembersihan

Untuk membersihkan, hapus instance Compute Engine dan Memorystore dari Cloud Shell.

Hapus instance komputasi:

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

Hapus instance Memorystore for Redis:

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

9. Selamat!

Anda telah membuat Memorystore for Redis dan instance Compute Engine. Selain itu, Anda juga telah mengonfigurasi aplikasi Spring Boot untuk menggunakan Memorystore dengan caching Spring Boot.

Pelajari Lebih Lanjut

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.