1. खास जानकारी
Redis के लिए Memorystore, Google Cloud के लिए पूरी तरह से मैनेज की गई Redis सेवा है. Google Cloud पर चलने वाले ऐप्लिकेशन, बहुत बड़े पैमाने पर उपलब्ध, सुरक्षित Redis सेवा का इस्तेमाल करके, बेहतरीन परफ़ॉर्मेंस दे सकते हैं. ऐसा करने से, मुश्किल Redis डिप्लॉयमेंट को मैनेज करने की ज़रूरत नहीं पड़ती. Spring बूट ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए इसका इस्तेमाल डेटा कैश मेमोरी के लिए बैकएंड के तौर पर किया जा सकता है. कोडलैब इसे सेट अप करने का तरीका बताता है.
आपको इनके बारे में जानकारी मिलेगी
- Spring बूट ऐप्लिकेशन के लिए Memorystore का इस्तेमाल कैश बैकएंड के तौर पर कैसे करें.
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud प्रोजेक्ट
- ब्राउज़र, जैसे कि Google Chrome
- Vim, Emacs, और GNU Nano जैसे स्टैंडर्ड Linux टेक्स्ट एडिटर के बारे में जानकारी
कोडलैब का इस्तेमाल कैसे किया जाएगा?
Google Cloud की सेवाओं का इस्तेमाल करने का आपका अनुभव कैसा रहा?
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करना
- Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. (अगर आपके पास पहले से Gmail या G Suite खाता नहीं है, तो आपको एक खाता बनाना होगा.)
प्रोजेक्ट आईडी याद रखें. यह Google Cloud के सभी प्रोजेक्ट के लिए एक खास नाम होता है (ऊपर दिया गया नाम पहले ही ले लिया गया है और यह आपके लिए काम नहीं करेगा!). बाद में, इस कोडलैब को इस कोडलैब में PROJECT_ID
के तौर पर दिखाया जाएगा.
- इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी.
इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. "साफ़ करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें सेक्शन में, संसाधनों को बंद करने का तरीका बताया गया है. इससे इस ट्यूटोरियल के अलावा बिलिंग की सुविधा नहीं मिलेगी. Google Cloud के नए उपयोगकर्ता, 300USD डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में हिस्सा ले सकते हैं.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें पर क्लिक करें.
अगर आपने Cloud Shell का इस्तेमाल पहले कभी नहीं किया है, तो आपको इसके बारे में जानकारी देने वाली एक इंटरमीडिएट स्क्रीन (पेज के फ़ोल्ड के नीचे) दिखेगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें (यह आपको फिर कभी नहीं दिखेगा). एक बार इस्तेमाल होने वाली स्क्रीन कुछ इस तरह दिखती है:
प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.
इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाने में मदद मिलती है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम बस किसी ब्राउज़र या आपके Chromebook से किया जा सकता है.
Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है. साथ ही, यह प्रोजेक्ट पहले से ही आपके प्रोजेक्ट आईडी पर सेट है.
- यह पुष्टि करने के लिए 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. Redis इंस्टेंस के लिए Memorystore सेट अप करना
Cloud Shell को चालू करें.
Cloud Shell के लॉन्च होने के बाद, Memorystore API को चालू करने और नया Memorystore इंस्टेंस बनाने के लिए, कमांड लाइन का इस्तेमाल करें.
$ gcloud services enable redis.googleapis.com $ gcloud redis instances create myinstance --size=1 --region=us-central1
कार्रवाई पूरी होने के बाद, आपका इंस्टेंस इस्तेमाल के लिए तैयार हो जाएगा.
नीचे दिए गए निर्देश की मदद से, इंस्टेंस का redis होस्ट ip-address पाएं. अपने Spring बूट ऐप्लिकेशन को कॉन्फ़िगर करते समय, आप इसका फिर से इस्तेमाल कर पाएंगे.
$ 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
कार्रवाई पूरी होने के बाद, आपका इंस्टेंस इस्तेमाल के लिए तैयार हो जाएगा.
इस निर्देश की मदद से, एसएसएच के ज़रिए अपने इंस्टेंस से कनेक्ट करें:
$ gcloud compute ssh instance-1 --zone us-central1-c
इसके अलावा, कंप्यूट पर जाएं > Compute Engine > वीएम इंस्टेंस को चुनें और कनेक्ट करें कॉलम में, एसएसएच पर क्लिक करें:
वर्चुअल मशीन (वीएम) इंस्टेंस शेल (Cloud Shell नहीं) में, OpenJDK, Maven, और Redis टूल इंस्टॉल करें:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
इंस्टॉल होने तक इंतज़ार करें और फिर अगले चरण पर जाएं.
5. Spring बूट ऐप्लिकेशन सेट अप करना
web
, redis
, और cache
डिपेंडेंसी के साथ एक नया Spring बूट प्रोजेक्ट बनाएं:
$ 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
फ़ाइल में बदलाव करें, ताकि Redis होस्ट के लिए Memorystore इंस्टेंस के आईपी पते का इस्तेमाल किया जा सके.
$ nano src/main/resources/application.properties
Redis आईपी पते के लिए अपने Memorystore के साथ, नीचे दी गई लाइन जोड़ें (कुछ चरण पहले से):
spring.data.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 बूट ऐप्लिकेशन क्लास में कैश मेमोरी की सुविधा चालू कर देंगे. 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
अपने इंस्टेंस में दूसरा एसएसएच कनेक्शन ठीक वैसे ही खोलें जैसे आपने पहले किया था. नई एसएसएच विंडो में, "bob
" को पास करते हुए, /hello/
एंडपॉइंट को कई बार ऐक्सेस करें दिया गया नाम डालें.
$ 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 होस्ट से कनेक्ट करें. इसके लिए, redis-cli का इस्तेमाल करें:
$ redis-cli -h <memorystore-host-ip-address>
कैश मेमोरी वाली कुंजियों की सूची देखने के लिए, इस निर्देश का इस्तेमाल करें:
:6379> KEYS * 1) "hello::bob"
जैसा कि आपको दिख रहा है, कैश मेमोरी के नाम का इस्तेमाल कुंजी के प्रीफ़िक्स के तौर पर और पैरामीटर की वैल्यू के दूसरे हिस्से के तौर पर किया गया है.
वैल्यू को फिर से पाने के लिए, GET
निर्देश का इस्तेमाल करें:
:6379> GET hello::bob Hello bob!
बाहर निकलने के लिए, exit
निर्देश का इस्तेमाल करें.
8. व्यवस्थित करें
स्टोरेज खाली करने के लिए, Cloud Shell से Compute Engine और Memorystore के इंस्टेंस मिटाएं.
कंप्यूट इंस्टेंस मिटाएं:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Memorystore for Redis इंस्टेंस मिटाएं:
$ gcloud redis instances delete myinstance --region=us-central1
9. बधाई हो!
आपने Redis और Compute Engine इंस्टेंस के लिए Memorystore बनाया है. साथ ही, आपने Spring बूट कैश मेमोरी में Memorystore का इस्तेमाल करने के लिए Spring बूट ऐप्लिकेशन को कॉन्फ़िगर किया है!
ज़्यादा जानें
- स्प्रिंग बूट कैशिंग
- Memorystore
- वसंत में Google Cloud GitHub रिपॉज़िटरी (डेटा स्टोर करने की जगह)
- Google Cloud पर Java
लाइसेंस
इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.