Memorystore for Redis, Google Cloud के लिए पूरी तरह से मैनेज की जाने वाली Redis सेवा है. Google Cloud पर चलने वाले ऐप्लिकेशन, Redis की ज़्यादा स्केलेबल, उपलब्ध, और सुरक्षित सेवा का फ़ायदा पा सकते हैं. इसके लिए, उन्हें Redis के जटिल डिप्लॉयमेंट को मैनेज करने की ज़रूरत नहीं होती. इसका इस्तेमाल, Spring Boot ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, डेटा कैश मेमोरी के बैकएंड के तौर पर किया जा सकता है. इस कोडलैब में, इसे सेट अप करने का तरीका बताया गया है.
आपको क्या सीखने को मिलेगा
- Spring Boot ऐप्लिकेशन के लिए, Memorystore को कैश मेमोरी के बैकएंड के तौर पर इस्तेमाल करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud प्रोजेक्ट
- कोई ब्राउज़र, जैसे कि Google Chrome
- Vim, Emacs, और GNU Nano जैसे स्टैंडर्ड Linux टेक्स्ट एडिटर के बारे में जानकारी
आपको इस कोडलैब का इस्तेमाल कैसे करना है?
Google Cloud की सेवाओं को कितनी रेटिंग देना चाहेंगे/चाहेंगी?
अपने हिसाब से एनवायरमेंट सेट अप करना
अगर आपके पास पहले से कोई Google खाता (Gmail या Google Apps) नहीं है, तो आपको एक खाता बनाना होगा. Google Cloud Platform Console (console.cloud.google.com) में साइन इन करें और एक नया प्रोजेक्ट बनाएं:
प्रोजेक्ट आईडी याद रखें. यह सभी Google Cloud प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा. माफ़ करें! इस कोड लैब में इसे बाद में PROJECT_ID
के तौर पर दिखाया जाएगा.
इसके बाद, Google Cloud संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.
इस कोडलैब को पूरा करने में आपको कुछ डॉलर से ज़्यादा खर्च नहीं करने पड़ेंगे. हालांकि, अगर आपको ज़्यादा संसाधनों का इस्तेमाल करना है या उन्हें चालू रखना है, तो यह खर्च बढ़ सकता है. इस दस्तावेज़ के आखिर में "सफ़ाई" सेक्शन देखें.
Google Cloud Platform के नए उपयोगकर्ता, 300 डॉलर के क्रेडिट के साथ मुफ़्त में आज़माने की सुविधा पा सकते हैं.
Google Cloud Shell चालू करना
GCP Console में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर मौजूद 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].
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].
ऑपरेशन पूरा होने के बाद, आपके इंस्टेंस का इस्तेमाल किया जा सकेगा.
यहां दी गई कमांड चलाकर, इंस्टेंस का redis host ip-address पाएं. Spring Boot ऐप्लिकेशन को कॉन्फ़िगर करते समय, इसका इस्तेमाल फिर से किया जाएगा.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
Google Cloud Console में स्टोरेज > Memorystore पर जाने के बाद, आपको अपना इंस्टेंस "तैयार है" स्थिति में दिखना चाहिए :
उसी क्षेत्र में Compute Engine इंस्टेंस बनाएं.
$ gcloud compute instances create instance-1 --zone us-central1-c
ऑपरेशन पूरा होने के बाद, आपके इंस्टेंस का इस्तेमाल किया जा सकेगा.
एसएसएच के ज़रिए अपने इंस्टेंस से कनेक्ट करने के लिए, Compute > Compute Engine > VM instances पर जाएं. इसके बाद, Connect कॉलम में मौजूद SSH पर क्लिक करें:
वर्चुअल मशीन (वीएम) इंस्टेंस शेल (Cloud Shell नहीं) में, OpenJDK, Maven, telnet इंस्टॉल करें:
$ sudo apt-get install openjdk-8-jdk-headless maven telnet
इंस्टॉल करने की प्रोसेस पूरी होने तक इंतज़ार करें. इसके बाद, अगले चरण पर जाएं.
web
, redis
, और cache
डिपेंडेंसी के साथ नया Spring Boot प्रोजेक्ट बनाएं:
$ 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
फ़ाइल में बदलाव करें, ताकि ऐप्लिकेशन को Redis होस्ट के Memorystore इंस्टेंस का आईपी पता इस्तेमाल करने के लिए कॉन्फ़िगर किया जा सके.
$ nano src/main/resources/application.properties
Memorystore for Redis के आईपी पते (जो आपने कुछ समय पहले कॉपी किया था) के साथ यह लाइन जोड़ें:
spring.redis.host=<memorystore-host-ip-address>
इसके बाद, एक नई लाइन जोड़ें और REST कंट्रोलर Java क्लास बनाएं:
$ 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
एनोटेशन, तरीके को एचटीटीपी एंडपॉइंट के तौर पर दिखाता है. साथ ही, पाथ के हिस्से को तरीके के पैरामीटर पर मैप करता है. ऐसा @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
अपने इंस्टेंस से दूसरा एसएसएच कनेक्शन उसी तरीके से खोलें जिस तरीके से आपने पहले खोला था. नई एसएसएच विंडो में, /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)
invocation का इस्तेमाल किया है. ऐसा इसलिए हुआ, क्योंकि असल तरीके को सिर्फ़ एक बार लागू किया गया था और नतीजे को कैश मेमोरी में सेव कर दिया गया था. इसके बाद, हर कॉल का नतीजा सीधे कैश मेमोरी से मिलता है.
इससे आपको यह पता चलता है कि ऐप्लिकेशन ने कौनसी जानकारी कैश मेमोरी में सेव की है. पिछले चरण में इस्तेमाल किए गए टर्मिनल से, telnet का इस्तेमाल करके Memorystore for Redis होस्ट से कनेक्ट करें:
$ telnet <memorystore-host-ip-address> 6379
कैश मेमोरी की कुंजियों की सूची देखने के लिए, इस कमांड का इस्तेमाल करें:
KEYS * hello::bob
जैसा कि आप देख सकते हैं, कैश मेमोरी के नाम का इस्तेमाल, कुंजी के लिए प्रीफ़िक्स के तौर पर किया जाता है. साथ ही, पैरामीटर की वैल्यू का इस्तेमाल दूसरे हिस्से के तौर पर किया जाता है.
वैल्यू वापस पाने के लिए, GET
कमांड का इस्तेमाल करें:
$ GET hello::bob Hello bob!
बाहर निकलने के लिए, QUIT
कमांड का इस्तेमाल करें.
क्लाउड शेल से Compute Engine और Memorystore इंस्टेंस मिटाकर, जगह खाली करें.
कंप्यूट इंस्टेंस मिटाएं:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Memorystore for Redis इंस्टेंस मिटाएं:
$ gcloud redis instances delete myinstance --region=us-central1
आपने Memorystore for Redis और Compute Engine इंस्टेंस बनाया हो. आपने Spring Boot की कैश मेमोरी का इस्तेमाल करके, Memorystore के साथ काम करने के लिए Spring Boot ऐप्लिकेशन को कॉन्फ़िगर भी किया है!
ज़्यादा जानें
- Spring Boot Caching
- Memorystore
- Spring on Google Cloud प्रोजेक्ट
- Google Cloud GitHub रिपॉज़िटरी पर Spring
- Google Cloud पर Java
लाइसेंस
इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.