لمحة عن هذا الدرس التطبيقي حول الترميز
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) وإنشاء مشروع جديد:
عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان 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 مع التخزين المؤقت الربيعي.
مزيد من المعلومات
- تخزين مؤقت في الربيع
- متجر الذكريات
- مشروع Spring على Google Cloud
- ربيع في مستودع GitHub في Google Cloud
- Java على Google Cloud
الترخيص
يخضع هذا العمل لترخيص بموجب رخصة المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0.