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

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. सेटअप और ज़रूरी शर्तें

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

  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 के नए उपयोगकर्ता, 300USD डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloud Shell चालू करें

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

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

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

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

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

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

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 Engine > वीएम इंस्टेंस को चुनें और कनेक्ट करें कॉलम में, एसएसएच पर क्लिक करें:

a87bd437a0c8c7b4.png

वर्चुअल मशीन (वीएम) इंस्टेंस शेल (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 बूट ऐप्लिकेशन को कॉन्फ़िगर किया है!

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

लाइसेंस

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