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

Redis के लिए मेमोरी स्टोर, Google Cloud के लिए पूरी तरह से मैनेज की जाने वाली Redis सेवा है. Google Cloud पर चलने वाले ऐप्लिकेशन, Redis डिप्लॉयमेंट को मुश्किल तरीके से मैनेज करने के बोझ के बिना, ज़्यादा आसान, सुरक्षित, और सुरक्षित Redis सेवा का इस्तेमाल करके, सबसे अच्छी परफ़ॉर्मेंस पा सकते हैं. इसका इस्तेमाल स्प्रिंग बूट ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए डेटा कैशिंग के लिए बैकएंड के रूप में किया जा सकता है. कोडलैब में इसे सेट अप करने का तरीका बताया गया है.

आप क्या #39;जानेंगे

  • स्प्रिंग बूट ऐप्लिकेशन के लिए कैश मेमोरी के तौर पर मेमोरी स्टोर का इस्तेमाल कैसे करें.

आपको क्या चाहिए

  • Google Cloud का कोई प्रोजेक्ट
  • ब्राउज़र, जैसे कि Google Chrome
  • Vim, Emacs, और GNU नैनो जैसे मानक Linux टेक्स्ट एडिटर के बारे में जानना

आप कोडलैब का इस्तेमाल कैसे करेंगे?

रीड ओनली कसरत पढ़ें और पूरा करें

आप Google Cloud सेवाओं के साथ अपने अनुभव को कितनी रेटिंग देंगे?

शुरुआती बीच का लेवल असरदार

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

अगर आपके पास पहले से कोई Google खाता (Gmail या Google Apps) नहीं है, तो आपको एक खाता बनाना होगा. Google Cloud Platform Console (console.cloud.google.com) में साइन इन करें और एक नया प्रोजेक्ट बनाएं:

10-02-2016 का स्क्रीनशॉट 12:45:26.png

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

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

इस कोडलैब के जवाब में कुछ डॉलर से ज़्यादा खर्च नहीं करना चाहिए. हालांकि, अगर आप संसाधनों का इस्तेमाल करना जारी रखते हैं या उन्हें चलाना बंद कर देते हैं, तो यह ज़्यादा भी हो सकता है.

Google Cloud Platform के नए उपयोगकर्ता, 300 डॉलर का मुफ़्त ट्रायल पा सकते हैं.

Google Cloud Shell चालू करें

GCP Console पर सबसे ऊपर दाईं ओर मौजूद टूलबार में, Cloud Shell आइकॉन पर क्लिक करें:

इसके बाद, &Cont &Cloud Shell शुरू करें &कोटेशन पर क्लिक करें;:

प्रावधान करने और पर्यावरण से जुड़ने में सिर्फ़ कुछ समय लगना चाहिए:

इस वर्चुअल मशीन में डेवलपमेंट से जुड़े सभी टूल हैं#39. इसमें लगातार 5 जीबी की होम डायरेक्ट्री मिलती है. यह Google Cloud पर चलती है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती जाती है. इस लैब में, हो सकता है कि किसी ब्राउज़र या 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 को #39;चालू नहीं किया गया था, तो आपसे पूछा जाएगा कि आप इसे चालू करना चाहते हैं या नहीं. 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 होस्ट आईपी पता पाएं. आप अपने Spring बूट ऐप्लिकेशन को कॉन्फ़िगर करते समय, इसे फिर से इस्तेमाल करेंगे.

$ gcloud redis instances describe myinstance --region=us-central1 \
  | grep host
host: 10.0.0.4

अगर आप Google Cloud Console में Storage &gtMemorystore पर नेविगेट करते हैं, तो आपको अपने इंस्टेंस को &kot;ready&kot; स्थिति में देख सकते हैं :

एक ही क्षेत्र में कंप्यूट इंजन इंस्टेंस बनाएं.

$ gcloud compute instances create instance-1 --zone us-central1-c

कार्रवाई पूरी होने के बाद, इंस्टेंस इस्तेमाल किया जा सकेगा.

Compute > Compute Engine > VM इंस्टेंस पर जाकर, अपने इंस्टेंस को SSH की मदद से कनेक्ट करें और कनेक्ट करें कॉलम में SSH पर क्लिक करें:

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

$ sudo apt-get install openjdk-8-jdk-headless maven telnet

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

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

Redis होस्ट के लिए Memorystore इंस्टेंस के आईपी पते का इस्तेमाल करने के लिए ऐप्लिकेशन को कॉन्फ़िगर करने के लिए application.properties फ़ाइल में बदलाव करें.

$ nano src/main/resources/application.properties

Redis आईपी पते के लिए अपने 'Store' मेमोरी के साथ नीचे दी गई लाइन जोड़ें: कुछ कदम पहले से:

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.&kot; पैरामीटर है. इसका इस्तेमाल पैरामीटर वैल्यू के साथ कैश कुंजी के तौर पर किया जाता है. आपको बाद में कोड लैब में एक उदाहरण दिखेगा.

इसके अलावा, आपको 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);
 }
}

अब आप #39;ऐप्लिकेशन का इस्तेमाल करने के लिए तैयार हैं!

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

आप वास्तव में यह देख सकते हैं कि ऐप्लिकेशन ने क्या कैश किया है. जिस टर्मिनल का आपने पिछले चरण में इस्तेमाल किया था, उसी टर्मिनल से, टेलनेट का इस्तेमाल करके Redis होस्ट के लिए मेमोरीस्टोर से कनेक्ट करें:

$ telnet <memorystore-host-ip-address> 6379

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

KEYS *
hello::bob

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

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

$ GET hello::bob
   Hello bob!

बाहर निकलने के लिए QUIT निर्देश का इस्तेमाल करें.

स्टोरेज खाली करने के लिए, Cloud Shell से कंप्यूट इंजन और मेमोरीस्टोर इंस्टेंस मिटाएं.

कंप्यूट इंस्टेंस मिटाएं:

$ gcloud compute instances delete instance-1 --zone us-central1-c

Redis इंस्टेंस के लिए Memorystore मिटाएं:

$ gcloud redis instances delete myinstance --region=us-central1

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

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

लाइसेंस

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