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 ) وارد شوید و یک پروژه جدید ایجاد کنید:
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های 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 پیکربندی کرده اید!
بیشتر بدانید
- ذخیره بوت بهار
- Memorystor
- پروژه Spring on Google Cloud
- Spring on Google Cloud GitHub مخزن
- جاوا در Google Cloud
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.