کش داده ها از یک برنامه Spring Boot با Memorystore

1. بررسی اجمالی

Memorystor for Redis یک سرویس Redis کاملاً مدیریت شده برای Google Cloud است. برنامه‌هایی که در Google Cloud اجرا می‌شوند، می‌توانند با استفاده از سرویس بسیار مقیاس‌پذیر، در دسترس و ایمن Redis بدون مدیریت پیاده‌سازی‌های پیچیده Redis، به عملکرد فوق‌العاده‌ای دست یابند. می توان از آن به عنوان پشتیبان برای ذخیره داده ها برای بهبود عملکرد برنامه های Spring Boot استفاده کرد. Codelab نحوه تنظیم آن را توضیح می دهد.

چیزی که یاد خواهید گرفت

  • نحوه استفاده از Memorystore به عنوان پشتیبان کش برای یک برنامه Spring Boot.

آنچه شما نیاز دارید

  • یک پروژه Google Cloud
  • یک مرورگر، مانند Google Chrome
  • آشنایی با ویرایشگرهای متن استاندارد لینوکس مانند Vim، Emacs و GNU Nano

چگونه از Codelab استفاده خواهید کرد؟

فقط بخوانید تمرینات را بخوانید و کامل کنید

تجربه خود را با خدمات Google Cloud چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJHHXieCvXw5 Zw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8CXUF

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID نامیده خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در Cloud Console فعال کنید .

اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعمل‌های موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه می‌کند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورت‌حساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0ZlWzVDLWD2Ca0ZlUZRWLXT دی کیو .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4ZIRF6HQWQ2 rbzQ

اگر قبلاً Cloud Shell را راه‌اندازی نکرده‌اید، با یک صفحه میانی (زیر تاشو) روبرو می‌شوید که آن را توصیف می‌کند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4tw1Uo6VRh1

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyRvcD

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.

  1. برای تایید احراز هویت، دستور زیر را در 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. یک Memorystor برای نمونه 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 Console، به پایگاه داده > Memorystore > Redis بروید. نمونه شما باید در حالت "آماده" باشد:

ee90b43f15a6dc1f.png

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 کلیک کنید:

a87bd437a0c8c7b4.png

در پوسته نمونه ماشین مجازی (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> 

پس از آن یک خط جدید اضافه کنید و یک کلاس جاوا کنترلر 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. اشیاء ذخیره شده را مرور کنید

شما در واقع می توانید ببینید که برنامه دقیقاً چه چیزی را کش کرده است. از همان ترمینالی که در مرحله قبل استفاده کردید، با استفاده از redis-cli به میزبان Memorystore برای Redis متصل شوید:

$ 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

حذف Memorystor برای مثال Redis:

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

9. تبریک می گویم!

شما Memorystore را برای Redis و یک نمونه Compute Engine ایجاد کردید. همچنین، شما یک برنامه Spring Boot را برای استفاده از Memorystore با ذخیره سازی Spring Boot پیکربندی کرده اید!

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.