Memorystore से Spring बूट ऐप्लिकेशन का डेटा कैश करें

1. खास जानकारी

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 की सेवाओं को इस्तेमाल करने का आपका अनुभव कैसा रहा?

शुरुआती सामान्य एडवांस

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Cloud Console में साइन इन करें. इसके बाद, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. (अगर आपके पास पहले से Gmail या G Suite खाता नहीं है, तो आपको एक खाता बनाना होगा.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

प्रोजेक्ट आईडी याद रखें. यह सभी Google Cloud प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा. माफ़ करें! इस कोड लैब में इसे बाद में PROJECT_ID के तौर पर दिखाया जाएगा.

  1. इसके बाद, Google Cloud संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.

इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. "सफ़ाई करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें. इसमें बताया गया है कि संसाधनों को कैसे बंद किया जाए, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ता, मुफ़्त में आज़माने के लिए 300 डॉलर के प्रोग्राम में शामिल हो सकते हैं.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ पर क्लिक करें.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

अगर आपने पहले कभी Cloud Shell का इस्तेमाल नहीं किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में जानकारी दी गई होगी. अगर ऐसा होता है, तो जारी रखें पर क्लिक करें. इसके बाद, आपको यह स्क्रीन कभी नहीं दिखेगी. एक बार दिखने वाली स्क्रीन ऐसी दिखती है:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम, सिर्फ़ ब्राउज़र या Chromebook की मदद से किया जा सकता है.

Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर पहले ही सेट कर दिया गया है.

  1. पुष्टि करें कि आपने 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. Memorystore for Redis इंस्टेंस सेट अप करना

Cloud Shell शुरू करें.

Cloud Shell लॉन्च होने के बाद, कमांड लाइन का इस्तेमाल करके Memorystore API चालू करें और नया Memorystore इंस्टेंस बनाएं.

$ gcloud services enable redis.googleapis.com
$ gcloud redis instances create myinstance --size=1 --region=us-central1

ऑपरेशन पूरा होने के बाद, आपका इंस्टेंस इस्तेमाल के लिए तैयार हो जाएगा.

यहां दी गई कमांड चलाकर, इंस्टेंस का 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 > Redis पर जाएं. आपका इंस्टेंस "तैयार है" स्थिति में होना चाहिए :

ee90b43f15a6dc1f.png

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 > Compute Engine > वीएम इंस्टेंस पर जाएं. इसके बाद, कनेक्ट करें कॉलम में मौजूद एसएसएच पर क्लिक करें:

a87bd437a0c8c7b4.png

वर्चुअल मशीन (वीएम) इंस्टेंस शेल (Cloud Shell नहीं) में, OpenJDK, Maven, और Redis टूल इंस्टॉल करें:

$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools

इंस्टॉल करने की प्रोसेस पूरी होने तक इंतज़ार करें. इसके बाद, अगले चरण पर जाएं.

5. Spring Boot ऐप्लिकेशन सेट अप करना

web, redis, और cache डिपेंडेंसी के साथ नया Spring Boot प्रोजेक्ट बनाएं:

$ 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

Memorystore for Redis के आईपी पते (कुछ चरणों पहले मिला था) के साथ यह लाइन जोड़ें:

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 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);
 }
}

6. ऐप्लिकेशन चलाएं और एंडपॉइंट को ऐक्सेस करें

पक्का करें कि JAVA_HOME को सही वर्शन पर सेट किया गया हो:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

अब ऐप्लिकेशन को चलाया जा सकता है!

$ 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 का इस्तेमाल किया था. ऐसा इसलिए हुआ, क्योंकि असल तरीके को सिर्फ़ एक बार लागू किया गया था और नतीजे को कैश मेमोरी में सेव कर दिया गया था. इसके बाद, हर कॉल का नतीजा सीधे तौर पर कैश मेमोरी से मिलता है.

7. कैश मेमोरी में सेव किए गए ऑब्जेक्ट की समीक्षा करना

आपको यह पता चल सकता है कि ऐप्लिकेशन ने कौनसी जानकारी कैश मेमोरी में सेव की है. पिछले चरण में इस्तेमाल किए गए उसी टर्मिनल से, redis-cli का इस्तेमाल करके Memorystore for Redis होस्ट से कनेक्ट करें:

$ redis-cli -h <memorystore-host-ip-address>

कैश मेमोरी की कुंजियों की सूची देखने के लिए, इस कमांड का इस्तेमाल करें:

:6379> KEYS *
1) "hello::bob"

जैसा कि आप देख सकते हैं, कैश मेमोरी के नाम का इस्तेमाल, कुंजी के लिए प्रीफ़िक्स के तौर पर किया जाता है. साथ ही, पैरामीटर की वैल्यू का इस्तेमाल दूसरे हिस्से के तौर पर किया जाता है.

वैल्यू वापस पाने के लिए, GET कमांड का इस्तेमाल करें:

:6379> GET hello::bob
   Hello bob!

बाहर निकलने के लिए, exit कमांड का इस्तेमाल करें.

8. व्यवस्थित करें

क्लाउड शेल से 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. बधाई हो!

आपने Memorystore for Redis और Compute Engine इंस्टेंस बनाया हो. आपने Spring Boot की कैश मेमोरी की सुविधा के साथ Memorystore का इस्तेमाल करने के लिए, Spring Boot ऐप्लिकेशन को कॉन्फ़िगर किया है!

ज़्यादा जानें

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.