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. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید .
اگر قبلاً Cloud Shell را راهاندازی نکردهاید، با یک صفحه میانی (زیر تاشو) روبرو میشوید که آن را توصیف میکند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در 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 بروید. نمونه شما باید در حالت "آماده" باشد:
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 کلیک کنید:
در پوسته نمونه ماشین مجازی (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 مجوز دارد.