بيانات ذاكرة التخزين المؤقت من تطبيق Spring Bot مع Memorystore

بيانات ذاكرة التخزين المؤقت من تطبيق Spring Bot مع Memorystore

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: فبراير 11, 2020
account_circleتأليف موظف Google

1. نظرة عامة

Memorystore for Redis هي خدمة مُدارة بالكامل من Redis لخدمة Google Cloud. يمكن للتطبيقات التي تعمل على Google Cloud تحقيق أداء شديد من خلال الاستفادة من خدمة Redis القابلة للتطور والمتاحة والآمنة بدون عبء إدارة عمليات نشر Redis المعقدة. ويمكن استخدامها كخلفية للتخزين المؤقت للبيانات لتحسين أداء تطبيقات Spring Kiosk. يوضّح الدرس التطبيقي حول الترميز كيفية إعداده.

ما ستتعرّف عليه

  • كيفية استخدام Memorystore كخلفية لذاكرة التخزين المؤقت لتطبيق Springboot

المتطلبات اللازمة

  • مشروع على Google Cloud
  • متصفح، مثل Google Chrome
  • الإلمام بأدوات تحرير النصوص في Linux العادية، مثل Vim وEmacs وGNU Nano

كيف ستستخدم الدرس التطبيقي حول الترميز؟

كيف تقيّم تجربتك مع خدمات Google Cloud؟

2. الإعداد والمتطلّبات

إعداد البيئة الذاتية

إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، يجب إنشاء حساب. تسجيل الدخول إلى وحدة تحكُّم Google Cloud Platform (console.cloud.google.com) وإنشاء مشروع جديد:

لقطة شاشة من 2016-02-10 الساعة 12:45:26.png

عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID.

بعد ذلك، ستحتاج إلى تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

من المفترض ألا يكلفك العمل على هذا الدرس التطبيقي أكثر من بضعة دولارات، ولكن قد يترتّب عليك أكثر إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجع قسم "عرض الأسعار التقديري" في نهاية هذا المستند).

يكون المستخدمون الجدد لخدمة Google Cloud Platform مؤهَّلين للاستفادة من فترة تجريبية مجانية تبلغ 300 دولار أمريكي.

تفعيل Google Cloud Shell

من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

ثم انقر على "بدء 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].

3. إعداد مخزن ذاكرة لـ Redis

إنشاء Cloud Shell

بعد إطلاق Cloud Shell، يمكنك استخدام سطر الأوامر لإنشاء مثيل جديد في Memorystore.

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

إذا لم يتم تفعيل واجهة برمجة تطبيقات Memorystore، سيُطلب منك تحديد ما إذا كنت تريد تفعيلها. الإجابة 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].

بعد اكتمال العملية، سيصبح مثيلك جاهزًا للاستخدام.

احصل على redis host ip-address من المثيل عن طريق تشغيل الأمر التالي. وستستخدمها مرة أخرى لاحقًا عند ضبط تطبيق Spring Bot.

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

إذا انتقلت إلى مساحة التخزين > وMemorystore في Google Cloud Console، من المفترض أن تتمكن من رؤية مثيلك في "ready":

4. إعداد مثيل Compute Engine

أنشئ مثيل Compute Engine في المنطقة نفسها.

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

بعد اكتمال العملية، سيصبح مثيلك جاهزًا للاستخدام.

اربط بالمثيل عبر SSH من خلال الانتقال إلى Compute > Compute Engine > VMتقليدات، وانقر على SSH في عمود Connect:

في هيكل مثيل الآلة الافتراضية (وليس Cloud Shell)، ثبِّت OpenJDK وMven وtelnet:

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

انتظر حتى اكتمال التثبيت، ثم انتقل إلى الخطوة التالية.

5. إعداد تطبيق Spring Bot

إنشاء مشروع جديد لبدء موسم الربيع باستخدام تبعيات 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

أضف السطر التالي مع عنوان Memorystore لعنوان IP الخاص بـ Redis (من بضع خطوات):

spring.redis.host=<memorystore-host-ip-address> 

أضِف سطرًا جديدًا بعد ذلك وأنشئ فئة Java لوحدة تحكم 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&"It's مُستخدمًا مع قيمة المعلّمة كمفتاح ذاكرة تخزين مؤقت. سترى مثالاً لاحقًا في هذا الدرس التطبيقي حول الترميز.

وعليك أيضًا تفعيل التخزين المؤقت في فئة تطبيقات Spring Bot.

تعديل 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. تشغيل التطبيق والوصول إلى نقطة النهاية

أنت الآن على استعداد لتشغيل التطبيق.

$ 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. مراجعة العناصر المخزنة مؤقتًا

يمكنك أن تطّلع فعليًا على ما تخزينه التطبيق بالضبط. من الوحدة الطرفية نفسها التي استخدمتها في الخطوة السابقة، يمكنك الاتصال بمضيف Memorystore for Redis باستخدام telnet:

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

للاطّلاع على قائمة مفاتيح ذاكرة التخزين المؤقت، يمكنك استخدام الأمر التالي:

KEYS *
hello::bob

كما تلاحظ، يتم استخدام اسم ذاكرة التخزين المؤقت كبادئة للمفتاح ويتم استخدام قيمة المعلمة باعتبارها الجزء الثاني.

لاسترداد القيمة، استخدِم الأمر GET:

$ GET hello::bob
   Hello bob!

استخدِم الأمر QUIT للخروج.

8. تنظيف

للتنظيف، احذف مثيلات Engine Engine وMemorystore من Cloud Shell.

حذف مثيل الحوسبة:

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

حذف مخزن الذاكرة لمثيل Redis:

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

9. تهانينا.

أنشأت Memorystore لـ Redis ومثيل Compute Engine. لقد ضبطت أيضًا تطبيق Spring Bot لاستخدام ميزة Memorystore مع التخزين المؤقت الربيعي.

مزيد من المعلومات

الترخيص

يخضع هذا العمل لترخيص بموجب رخصة المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0.