۱. مرور کلی
Memorystore for Redis یک سرویس Redis کاملاً مدیریتشده برای Google Cloud است. برنامههایی که روی Google Cloud اجرا میشوند میتوانند با بهرهگیری از سرویس Redis بسیار مقیاسپذیر، در دسترس و امن، بدون نیاز به مدیریت پیادهسازیهای پیچیده Redis، به عملکرد فوقالعادهای دست یابند. میتوان از آن به عنوان یک backend برای ذخیرهسازی دادهها برای بهبود عملکرد برنامههای Spring Boot استفاده کرد. codelab نحوه راهاندازی آن را توضیح میدهد.
آنچه یاد خواهید گرفت
- نحوه استفاده از Memorystore به عنوان حافظه پنهان (cache backend) برای یک برنامه Spring Boot.
آنچه نیاز دارید
- یک پروژه ابری گوگل
- یک مرورگر، مثلاً گوگل کروم
- آشنایی با ویرایشگرهای متن استاندارد لینوکس مانند Vim، Emacs و GNU Nano
چگونه از codelab استفاده خواهید کرد؟
تجربه خود را با خدمات ابری گوگل چگونه ارزیابی میکنید؟
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. (اگر از قبل حساب Gmail یا G Suite ندارید، باید یکی ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژههای Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.
- در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .
اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعملهای بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش میدهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
فعال کردن پوسته ابری
- از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید
.
اگر قبلاً Cloud Shell را شروع نکردهاید، یک صفحه میانی (در زیر صفحه) به شما نمایش داده میشود که توضیح میدهد چیست. در این صورت، روی ادامه کلیک کنید (و دیگر هرگز آن را نخواهید دید). آن صفحه یکبار مصرف به این شکل است:
آمادهسازی و اتصال به Cloud Shell فقط چند لحظه طول میکشد.
این ماشین مجازی با تمام ابزارهای توسعهای که نیاز دارید، مجهز شده است. این ماشین یک دایرکتوری خانگی ۵ گیگابایتی پایدار ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. بخش عمدهای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را میتوان به سادگی با یک مرورگر یا کرومبوک انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شدهاید و پروژه از قبل روی شناسه پروژه شما تنظیم شده است.
- برای تأیید احراز هویت، دستور زیر را در 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].
۳. یک Memorystore برای نمونه Redis راهاندازی کنید
شروع پوسته ابری.
پس از راهاندازی Cloud Shell، از خط فرمان برای فعال کردن API Memorystore و ایجاد یک نمونه جدید 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
در کنسول گوگل کلود، به مسیر Databases > Memorystore > Redis بروید. نمونه شما باید در حالت "آماده" باشد:

۴. یک نمونه موتور محاسباتی راهاندازی کنید
یک نمونه 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 بروید و در ستون Connect روی SSH کلیک کنید:

در پوسته نمونه ماشین مجازی (VM) (نه پوسته ابری)، ابزارهای OpenJDK، Maven و Redis را نصب کنید:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
صبر کنید تا نصب کامل شود و سپس به مرحله بعدی بروید.
۵. یک برنامه 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 برای 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 " است. این نام در ترکیب با مقدار پارامتر به عنوان کلید حافظه پنهان استفاده میشود. مثالی از آن را بعداً در آزمایشگاه کد خواهید دید.
در مرحله بعد، قابلیت ذخیرهسازی (caching) را در کلاس برنامه 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);
}
}
۶. برنامه را اجرا کنید و به نقطه پایانی دسترسی پیدا کنید
مطمئن شوید که 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) را در متد دارید، درخواست بعدی به طور قابل توجهی سریعتر بود. دلیل این امر این است که متد اصلی فقط یک بار اجرا شده و نتیجه در حافظه پنهان قرار گرفته است. هر فراخوانی بعدی نتیجه را مستقیماً از حافظه پنهان برمیگرداند.
۷. بررسی اشیاء ذخیره شده در حافظه پنهان (cache)
شما میتوانید دقیقاً ببینید که برنامه چه چیزی را ذخیره کرده است. از همان ترمینالی که در مرحله قبل استفاده کردید، با استفاده از redis-cli به Memorystore برای میزبان Redis متصل شوید:
$ redis-cli -h <memorystore-host-ip-address>
برای مشاهده لیست کلیدهای کش، از دستور زیر استفاده کنید:
:6379> KEYS * 1) "hello::bob"
همانطور که میبینید، نام حافظه پنهان به عنوان پیشوند کلید و مقدار پارامتر به عنوان بخش دوم استفاده شده است.
برای بازیابی مقدار، از دستور GET استفاده کنید:
:6379> GET hello::bob Hello bob!
برای خروج از دستور exit استفاده کنید.
۸. تمیز کردن
برای پاکسازی، نمونههای 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 منتشر شده است.