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

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 چگونه ارزیابی می کنید؟

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

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

اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:

اسکرین شات از 10/02/2016 12:45:26.png

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

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

گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا اگر آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید).

کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.

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

از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

سپس روی "Start Cloud Shell" کلیک کنید:

تهیه و اتصال به محیط فقط چند لحظه طول می کشد:

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

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

برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:

gcloud auth list

خروجی فرمان

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

خروجی فرمان

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی فرمان

Updated property [core/project].

Cloud Shell را راه اندازی کنید.

پس از راه اندازی Cloud Shell، می توانید از خط فرمان برای ایجاد یک نمونه Memorystore جدید استفاده کنید.

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

اگر Memorystore API فعال نبود، از شما پرسیده می شود که آیا می خواهید آن را فعال کنید. پاسخ 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].

پس از اتمام عملیات، نمونه شما آماده استفاده خواهد بود.

با اجرای دستور زیر آدرس IP میزبان redis نمونه مورد نظر را دریافت کنید. بعداً هنگام پیکربندی برنامه Spring Boot خود دوباره از آن استفاده خواهید کرد.

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

اگر در Google Cloud Console به Storage > Memorystore بروید ، باید بتوانید نمونه خود را در حالت "آماده" ببینید:

یک نمونه Compute Engine در همان منطقه ایجاد کنید.

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

پس از اتمام عملیات، نمونه شما آماده استفاده خواهد بود.

با رفتن به Compute > Compute Engine > VM instances ، از طریق SSH به نمونه خود متصل شوید و در ستون Connect روی SSH کلیک کنید:

در پوسته نمونه ماشین مجازی (VM) (نه Cloud Shell)، OpenJDK، Maven، telnet را نصب کنید:

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

صبر کنید تا نصب کامل شود و سپس به مرحله بعدی بروید.

یک پروژه Spring Boot جدید با وابستگی web ، redis و 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

application.properties را ویرایش کنید فایل برای پیکربندی برنامه برای استفاده از آدرس IP نمونه Memorystore برای میزبان Redis.

$ nano src/main/resources/application.properties

خط زیر را با آدرس IP Memorystore for Redis خود اضافه کنید (از چند مرحله قبل):

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

اکنون برای اجرای برنامه آماده هستید!

$ 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) دارید. به این دلیل که روش واقعی فقط یک بار اجرا شد و نتیجه در حافظه پنهان قرار گرفت. هر تماس بعدی نتیجه را مستقیماً از حافظه پنهان برمی‌گرداند.

شما در واقع می توانید ببینید که برنامه دقیقا چه چیزی را در حافظه پنهان ذخیره کرده است. از همان ترمینالی که در مرحله قبل استفاده کردید، با استفاده از telnet به میزبان Memorystore برای Redis متصل شوید:

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

برای مشاهده لیست کلیدهای کش، از دستور زیر استفاده کنید:

KEYS *
hello::bob

همانطور که می بینید، نام کش به عنوان پیشوند کلید و مقدار پارامتر به عنوان قسمت دوم استفاده می شود.

برای بازیابی مقدار، از دستور GET استفاده کنید:

$ GET hello::bob
   Hello bob!

برای خروج از دستور QUIT استفاده کنید.

برای پاکسازی، نمونه‌های Compute Engine و Memorystore را از Cloud Shell حذف کنید.

نمونه محاسبه را حذف کنید:

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

Memorystore را برای مثال Redis حذف کنید:

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

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

بیشتر بدانید

مجوز

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