Node.js और रेडिस। उच्च प्रदर्शन कैशिंग

दो प्रौद्योगिकियों में प्रदर्शन और सरलता। यह एक मेल है!

मैं यहां लंबी बात नहीं करना चाहता। चलिए Redis CLI की मूल बातें को कवर करते हुए, अपनी मशीन पर Redis को समझाने और स्थापित करने के साथ शुरू करते हैं और फिर Node.ss.s. में इसका उपयोग करते हैं अभी के लिए हम केवल Redis में सरल डेटाटाइप्स के साथ काम करेंगे। क्योंकि वही है जिसकी हमें ज्यादातर जरूरत है। यहाँ अच्छी खबर है: चाहे आप नोड्स के साथ रेडिस का उपयोग करें या किसी अन्य प्रोग्रामिंग लैंगगॉउज़ का उपयोग करें - यह हर जगह समान रूप से समान होगा, जब मैंने आपको रेडिस के सबसे महत्वपूर्ण आदेशों से परिचित कराया था।

रेडिस क्या है, और यह इतना अच्छा क्यों है?

Redis एक इन-मेमोरी डेटाबेस है, जो प्रमुख मानों के साथ काम करता है। इसलिए प्रत्येक मूल्य के लिए, एक कुंजी है। इसलिए Redis एक SQL डेटाबेस नहीं है, और इसे आदिम डेटा संरचनाओं के लिए डिज़ाइन किया गया है, जिसे हम इस लेख में काम करेंगे। Redis के साथ डेटा को पढ़ने और लिखने की गति और सरल कुंजी-मूल्य प्रणाली के कारण, Redis को उदाहरण के लिए caches के लिए आश्चर्यजनक रूप से उपयोग किया जा सकता है। स्थायी डेटा जैसे उपयोगकर्ता की जानकारी या चित्र, हालांकि, इसकी अस्थिरता के कारण Redis के साथ संग्रहीत नहीं किए जाने चाहिए। क्या आप पहले से ही अधिक के लिए भूखे हैं? चलो चलते हैं!

अपनी मशीन पर Redis स्थापित करना

लिनक्स: https://redis.io/topics/quickstart sudo service redis start या sudo service redis-server start

MacOS: यदि आपके पास यह पहले से स्थापित नहीं है, तो काढ़ा स्थापित करें: https://brew.sh/ brew, redis brew सेवाएं शुरू करें

विंडोज: विंडोज के लिए लिनक्स सबसिस्टम का उपयोग करें। फिर इसे लिनक्स पर स्थापित करें।

जाँच करें, यदि रेडिस काम कर रहा है:

एक बार जब आप पहले से ही रेडिस सेवा शुरू कर देते हैं, तो आपको रेडिस-क्ली के माध्यम से इसके साथ संवाद करने में सक्षम होना चाहिए। Redis-cli पिंग करने की कोशिश करें और Redis को "पोंग" के साथ जोड़ना चाहिए। इसका मतलब है, रेडिस काम कर रहा है।

रेडिस सीएलआई

जब आपकी Redis चल रही होती है, तो आप इसे सीधे कनेक्ट करने के लिए हमेशा redis-cli का उपयोग कर सकते हैं। CLI में आप सभी Redis कमांड चला सकते हैं, तो चलिए कुछ पर नजर डालते हैं।

एक साधारण स्ट्रिंग के साथ काम करना

नोट: क्या हम SET और अन्य आदेशों को कैपिटल करते हैं, CLI में अप्रासंगिक हैं। सरल डेटा के लिए सिद्धांत सरल है। हम कहते हैं, सेट करें, फिर कुंजी दें, यानी चर नाम, और इसके बाद के स्थान के साथ, बस मूल्य।

सेट का नाम मैक्स

अब हम अपनी कुंजी का मूल्य प्रिंट कर सकते हैं, जिसे "नाम" कहा जाता है। हमें "मैक्स" प्राप्त करना चाहिए

नाम मिलता है     

जब हमने अपने नाम के साथ पर्याप्त खेला है तो हम इसे फिर से हटा सकते हैं। उसके बाद जब हम पहले से हटाए गए मूल्य को फिर से एक्सेस करने की कोशिश करते हैं तो हमें (nil) उम्मीद करनी चाहिए।

DEL नाम GET नाम // (nil) मुद्रित किया जाएगा।

लेकिन शायद हम बाद में एक और नाम बचाना चाहते हैं। ऐसा करने के लिए, आइए पहले एक बार फिर से एक नाम बनाएँ, और जानबूझकर कुंजी को "नाम" दें

अधिकतम नाम सेट करें

अब हम इस स्ट्रिंग का विस्तार कर सकते हैं, जो इस मामले में मैं उद्धरण चिह्नों के साथ करूंगा, ताकि रेडिस में रिक्त स्थान और विशेष वर्ण भी शामिल होंगे।

APPEND नाम "और मैट"

पहले की तरह, हमें अब पूर्ण किए गए स्ट्रिंग को फिर से आउटपुट करने में सक्षम होना चाहिए। हमें "मैक्स एंड मैट" मिलना चाहिए।

लेकिन अब हम आसानी से कैश का एहसास कैसे कर सकते हैं?

अच्छा सवाल है, मुझे लगता है। जाहिरा तौर पर आप पहले सावधान थे जब मैंने कहा कि इसके लिए रेडिस महान है। खैर, कैश की बात अस्थायी रूप से डेटा को स्टोर करना है। अब हम जानते हैं कि डेटा कैसे मिटाया जाए, लेकिन पूरे कैश के लिए जो थोड़ा बोझिल होगा। इसलिए Redis हमारे द्वारा परिभाषित समय के बाद डेटा को स्वचालित रूप से समाप्त करने की संभावना प्रदान करता है।

हम इसे दो तरीके से कर सकते हैं: 1) या तो हम कुंजी बनाते समय सीधे निर्दिष्ट करते हैं, कितने सेकंड के बाद इसे समाप्त होना चाहिए। 2) या हम इसे बाद में निर्धारित करते हैं। फिर से, हम जिस पास से गुजरते हैं वह कुंजी समाप्त होने तक सेकंड की संख्या है।

// 1) नाम-कुंजी 60 सेकंड SET नाम मैक्स EX 60 के बाद समाप्त हो जाएगी
// 2) सबसे पहले हम SET नाम को अधिकतम परिभाषित करते हैं // तब हम परिभाषित करते हैं कि एक्सपायर नाम 60 को कब समाप्त किया जाए

इसलिए यदि यह निर्धारित किया गया है कि किसी बिंदु पर एक कुंजी समाप्त होनी चाहिए, तो हम किसी भी समय वर्तमान शेष जीवनकाल को पढ़ सकते हैं। बस इसे फिर से स्पष्ट करने के लिए: केवल शेष समय, जो निश्चित रूप से हर सेकंड बदलता है, आउटपुट है।

SET का नाम Max EX 60 है
// शेष समय टीटीएल नाम प्राप्त करें
// 60, 59, 58 आदि होगा ...

लेकिन हमें अभी भी एक कार्यशील कैश के लिए एक और चीज की आवश्यकता होगी ...

अब हम मैन्युअल रूप से और स्वचालित रूप से चाबियाँ हटा सकते हैं। लेकिन क्या होगा अगर हम अभी जांचना चाहते हैं कि हमारी कुंजी अभी भी है या नहीं? इसके लिए Redis में मौजूद फ़ंक्शन है। यदि कुंजी मौजूद है और यह नहीं है तो यह 1 लौटाता है।

अधिकतम नाम का नाम सेट करें // नाम वापस आ जाएगा: (पूर्णांक) 1
DEL नाम EXISTS नाम // वापस आ जाएगा: (पूर्णांक) 0

अब आप सीएलआई और रेडिस के सबसे महत्वपूर्ण आदेशों से परिचित हैं। अब इसे अभ्यास में लाएँ - Node.js के साथ!

Node.js में रेडिस के साथ शुरुआत करना

पहले हमें अपनी Node.js परियोजना में Redis स्थापित करने की आवश्यकता है:

npm रेडिस स्थापित करें

फिर हम इसे अपने कोड में आयात कर सकते हैं, और हमारे मशीन पर हमारे Redis उदाहरण से कनेक्ट कर सकते हैं। CreateClient के लिए पैरामीटर हमारी मशीन पर हमारे उदाहरण का पता होगा (इसलिए हम लोकलहोस्ट का उपयोग करते हैं) और पोर्ट 6379 रेडिस के लिए डिफ़ॉल्ट पोर्ट है।

const redis = आवश्यकता ('redis') const क्लाइंट = redis.createClient ('redis: // localhost: 6379')

यह अब तक है। अब हम इसे नोड में उपयोग कर सकते हैं, पहले जैसी कमांड के साथ। तो आपको यह कमांड याद रखना चाहिए:

सेट का नाम मैक्स

यह केवल, Node.js के लिए समान है:

ग्राहक.सेट ('हाय', 'वहाँ')

जैसा कि आप देख सकते हैं, यह लगभग समान है। केवल सिंटैक्स थोड़ा बदलता है, क्लाइंट ऑब्जेक्ट के माध्यम से हम हमेशा बिंदु के बाद संबंधित कमांड को एक्सेस करते हैं। बेशक, जावास्क्रिप्ट में हमें उद्धरण चिह्नों में तार पास करना होगा, सीएलआई में ही यह आवश्यक नहीं है।

इसलिए, यहाँ हम पहले से ही सीखी गई सभी कमांड्स हैं। Node.js की तुलना के साथ

नाम मिलता है
client.get ('नाम', (त्रुटि, मान) => {कंसोल.लॉग (मान)})
// या इसे सीधे प्रिंट करने के लिए: (केवल मूल्य का प्रिंट नहीं लेंगे) client.get ('नाम', कंसोल.लॉग)

जैसा कि आप देख सकते हैं, हम हमेशा सभी आदेशों के लिए एक और फ़ंक्शन का उपयोग करते हैं जहां हमें कुछ मिलता है। पहला पैरामीटर हमें संभावित त्रुटि संदेश देता है, दूसरा वास्तविक परिणाम है। और हाँ, दूसरे उदाहरण में दिखाए गए प्रत्यक्ष आउटपुट के लिए, हम सीधे फंक्शन में कंसोल.लॉग लिख सकते हैं। महत्वपूर्ण: आउटपुट "शून्य अधिकतम" होना चाहिए, लेकिन यहां "शून्य" का अर्थ केवल यह है कि कोई त्रुटि नहीं हुई। पहले उदाहरण में, "मूल्य" केवल कुंजी के मूल्य को सीधे आउटपुट करने के लिए उपयोग किया जाता है।

अगला उदाहरण, हटाना:

DEL नाम
client.del ( 'नाम')

जोड़:

APPEND का नाम 'और टॉम'
client.append ('नाम', 'और टॉम')

कुंजी निर्धारित होने पर सीधे निर्धारित करें:

SET का नाम Max EX 60 है
ग्राहक.सेट ('नाम', 'मैक्स', 'पूर्व', 60)

और हम इसे बाद में कैसे कर सकते हैं:

EXPIRE नाम 60
ग्राहक। एक्सप्रायर ('नाम', 60)

समाप्ति तक समय शेष:

टीटीएल नाम
client.ttl ('नाम', (त्रुटि, मान) => {कंसोल.लॉग (मूल्य)})

जाँच की जा रही है कि क्या मौजूद है: (जावास्क्रिप्ट 0 को गलत, 1 को पाठ्यक्रम के सत्य के रूप में देखेगा)

EXISTS नाम
client.exists ('नाम', (त्रुटि, मान) => {if (मान) {कंसोल.लॉग ('कुंजी मौजूद है')} और {कंसोल.लॉग ('कुंजी मौजूद नहीं है')}})

मुझे लगता है कि अब सिद्धांत स्पष्ट होना चाहिए। Node.js के लिए वाक्यविन्यास पूरी तरह से आदेशों के प्रकारों के लिए निर्धारित है, इसलिए अब आप अपने आप Redis के अपने ज्ञान का विस्तार करने में सक्षम हैं और न केवल CLI में बल्कि Node.js. कि सब के बाद मुश्किल नहीं था :)

लेकिन यहाँ आपके लिए एक अतिरिक्त है - क्योंकि हम सभी वस्तुओं और JSON के साथ काम करना पसंद करते हैं। यहाँ है कि रेडिस में जेएस ऑब्जेक्ट को कैसे बचाया जाए। और फिर इसे कैसे प्रिंट किया जाए

client.set ('नाम', JSON.stringify ({firstname: 'max', lastname: 'meyer)})
client.get ('नाम', (इरेट, वैल) => {कंसोल.लॉग (JSON.parse (वैल))})

इसे पढ़ने के लिए धन्यवाद। यदि आपके पास कुछ अतिरिक्त हैं, तो उन्हें टिप्पणियों में लिखें। मैं हर समय इस लेख को जोड़ने की योजना बनाता हूं, इसलिए अक्सर वापस जांचने के लिए स्वतंत्र महसूस करता हूं। और एक आखिरी बात इससे पहले कि आप अंततः रेडिस के साथ अकेले मज़े कर सकें: मुझे एक ताली छोड़ दो, यह कुछ भी खर्च नहीं करता है :)

मेरे बारे में, लेखक :)

नमस्ते! पढ़ने के लिए फिर से बहुत-बहुत धन्यवाद, मेरा नाम लुई है और मैं जर्मनी का एक 18 साल का छात्र हूं। मुझे वेब डेवलपमेंट, बैकएंड और फ्रंटएंड दोनों से प्यार है। मेरी पसंदीदा प्रौद्योगिकियाँ React, Vue, React Native और Node.js. उन लोगों से संबंधित अधिक सामग्री के लिए मुझे फ़ॉलो करना सुनिश्चित करें, और मेरे आईजी के @ louis.jsx & @codingcultureshop पर एक अच्छा दिन देखने के लिए स्वतंत्र महसूस करें!