Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Redis

रेडिस पब/उप:Howto Guide

रेडिस पब/सब पर हमारा अवलोकन लेख पब/सब के उद्देश्य पर चर्चा करता है और विशेष रूप से रेडिस पब/सब के डिजाइन विकल्पों का वर्णन करता है। अब हम रेडिस पब की प्रत्येक मुख्य अवधारणा के माध्यम से रेडिस पब/सब का उपयोग करने के तरीके की ओर मुड़ेंगे। /उप:चैनल, प्रकाशन, सदस्यता, और पैटर्न-मिलान, noderedis node.js क्लाइंट का उपयोग करना।

चैनलों को समझना

एक चैनल पब/सबसिस्टम पर प्रकाशित संदेशों को वर्गीकृत करने के लिए इस्तेमाल किया जाने वाला नाम है। चैनल के सिस्टम-निर्भर नाम हो सकते हैं, जैसे system-health:i-36a44b83 ,trade-prices:RAX , temp-reading:living-room , या कुछ बहुत ही सामान्य, जैसेevents . चैनल पर दिखाई देने वाले डेटा में रुचि रखने वाला कोई भी ग्राहक इसे सुन सकता है, और सिस्टम के बढ़ने पर नए प्रकाशक और ग्राहक आसानी से जुड़ जाते हैं।

यह पता लगाने के लिए कि रेडिस सर्वर पर कौन से चैनल सक्रिय हैं, आप PUBSUB CHANNELS का उपयोग कर सकते हैं कमांड, जो कुछ भी नहीं लौटाता है जब एक सिस्टम अभी तक पब/उप के लिए उपयोग नहीं किया जा रहा है:

$ redis-cli pubsub channels
(empty list or set)

सिस्टम पर चैनल केवल तभी मौजूद होते हैं जब कोई ग्राहक उस पर संदेशों को सुन रहा होता है, इसलिए चैनल को कभी भी "बनाने" या "निकालने" की कोई आवश्यकता नहीं होती है - वे केवल तब मौजूद होते हैं जब एक ग्राहक सुन रहा होता है। इसे देखने के लिए, हम redis-cli . का उपयोग कर सकते हैं एक कंसोल विंडो में सब्सक्राइबर के रूप में कार्य करने के लिए, और PUBSUB CHANNELS run चलाएं फिर से दूसरी विंडो में:

कंसोल 1:

$ redis-cli subscribe events
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "events"
3) (integer) 1

कंसोल 2:

$ redis-cli pubsub channels
1) "events"

जैसे ही कंसोल 1 डिस्कनेक्ट करता है, सिस्टम में फिर से कोई चैनल नहीं होगा।

संदेश प्रकाशित करना

कमांड सिंटैक्स

PUBLISH संदेशों को प्रकाशित करने के लिए कमांड का उपयोग किया जाता है।

PUBLISH channel message

चैनल पर सुनने वाले सभी ग्राहकों को संदेश भेजा जाएगा। यदि कोई सदस्य संदेश प्राप्त करने के लिए आस-पास नहीं है तो संदेश छोड़ दिया जाता है।

Node.js उदाहरण

रेडिस से नियमित कनेक्शन बनाने के बाद, किसी भी अन्य कमांड की तरह प्रकाशित किया जा सकता है:

var client = require("redis").createClient();
client.publish("temp-reading:living-room", "37.0");

अन्य Redis कमांड के साथ उपयोग करना

किसी चैनल पर डेटा प्रकाशित करना एक तेज़ ऑपरेशन है, इसलिए इसे आमतौर पर अन्य कार्यों के साथ मिलकर उपयोग किया जाता है। इस तरह के संयोजन से रेडिस की शक्ति का पता चलता है:

var client = require("redis").createClient();

client.multi()
  .publish("temp-reading:living-room", "37.0")
  .lpush("recent-temperatures", "37.0")
  .ltrim("recent-temperatures", 0, 99)
  .exec();

यह पब/सब सिस्टम के लिए पहले के उदाहरण के समान ऑपरेशन है, लेकिन उसी MULTI/EXEC में है। लेन-देन तापमान को एक सूची में भी धकेल दिया जाता है जो 100 सबसे हाल के तापमानों को बनाए रखता है।

यह संक्षिप्त उदाहरण Redis पब/उप को एक बड़े सिस्टम डिज़ाइन में एकीकृत करने का एक तरीका दिखाता है जिसमें संदेश इतिहास शामिल है। ऊपर की तरह एक ऑपरेशन अन्य क्लाइंट को हाल के मूल्यों के साथ-साथ नए मूल्यों की सदस्यता लेने देता है।

संदेशों की सदस्यता लेना

कमांड सिंटेक्स

SUBSCRIBE चैनल की सदस्यता के लिए कमांड का उपयोग किया जाता है। यह कमांड क्लाइंट को एक विशेष "सब्सक्राइब" स्थिति में रखता है जहां यह अब अतिरिक्त SUBSCRIBE के अलावा अन्य कमांड नहीं भेजता है या UNSUBSCRIBE आदेश।

SUBSCRIBE channel [channel ...]

Node.js उदाहरण

इस ग्राहक का उपयोग पहले के प्रकाशक उदाहरण के साथ किया जा सकता है:

var subscriber = require("redis").createClient();

subscriber.on("message", function(channel, message) {
  console.log("A temperature of " + message + " was read.");
});

subscriber.subscribe("temp-reading:living-room");

यह एक साधारण घटना उत्सर्जक का उपयोग करता है जो हर बार संदेश आने पर फ़ंक्शन को कॉल करता है। हैंडलिंग फ़ंक्शन अभी तापमान को कंसोल पर लॉग करता है - यह कुछ भी कर सकता है।

सदस्यों के साथ अन्य कमांड का उपयोग करना

जैसा कि पहले उल्लेख किया गया है, सब्सक्राइब्ड क्लाइंट एक विशेष मोड में हैं और अन्य कमांड के लिए उपयोग नहीं किए जा सकते हैं। अन्य आदेशों का उपयोग करने के लिए, आप Redis के लिए एक अलग क्लाइंट कनेक्शन बनाएंगे:

var redis = require("redis")
  , subscriber = redis.createClient()
  , client = redis.createClient();

subscriber.on("message", function(channel, message) {
  console.log("A temperature of " + message + " was read.");
  client.incr("temp-count");
});

subscriber.subscribe("temp-reading:living-room");

यह हैंडलर संदेश को कंसोल में लॉग करता है और रेडिस काउंटर को बढ़ाता है। कुछ मामलों में आप एक परिणाम की गणना कर सकते हैं और फिर उस परिणाम को अन्य ग्राहकों के पढ़ने के लिए अलग चैनल के लिए प्रकाशित कर सकते हैं - बस इसे उसी चैनल पर वापस प्रकाशित न करें जिस पर आप सुन रहे हैं, क्योंकि आप एक अनंत लूप का कारण बनेंगे :)

पैटर्न मिलान

कमांड सिंटेक्स

PSUBSCRIBE चैनल पैटर्न के मिलान के लिए कमांड का उपयोग किया जाता है।

PSUBSCRIBE pattern [pattern ...]

यह सामान्य SUBSCRIBE . की तरह ही काम करता है कमांड लेकिन आपको उन नामों के साथ चैनलों का मिलान करने की अनुमति देता है जो एक पैटर्न से मेल खाते हैं। यह प्रकाशकों को उनके द्वारा प्रकाशित की जाने वाली जानकारी के बारे में बहुत विशिष्ट होने देता है, और ग्राहकों को उनके सटीक नामों को जाने बिना कई चैनलों को सुनने की अनुमति देता है।

समर्थित पैटर्न सरल हैं:* किसी भी वर्ण से मेल खाता है, ? एक एकल वर्ण से मेल खाता है, और ब्रैकेट का उपयोग स्वीकार्य वर्णों के एक सेट से मेल खाने के लिए किया जा सकता है, जैसे [acd]

कई कमरों से तापमान रीडिंग का मिलान करें:

PSUBSCRIBE temp-reading:*

site-link:logo:a:clickrate . जैसे ए/बी परीक्षणों से घटनाओं का मिलान करें औरsite-link:logo:b:clickrate :

PSUBSCRIBE site-link:logo:?:clickrate

system-health:us-east-1a:i-36a44b83 जैसे प्रकाशित इवेंट के लिए, AWS इंस्टेंस की एक शृंखला में इवेंट का मिलान करें और system-health:us-east-1c:i-73657420636f636f6 :

PSUBSCRIBE system-health:us-east-1[acd]:i-*

Node.js उदाहरण

इस उदाहरण में, जिसका उपयोग पिछले प्रकाशन उदाहरण के साथ भी किया जा सकता है, उस कमरे के साथ तापमान लॉग किया जाता है जहां तापमान पढ़ा गया था।

var subscriber = require("redis").createClient();

subscriber.on("pmessage", function(pattern, channel, message) {
  var room = channel.split(":")[1];
  console.log("A temperature of " + message + " was read in " + room);
});

subscriber.psubscribe("temp-reading:*");

पैटर्न-आधारित ग्राहक को इसके कॉलबैक में कुछ और विवरण मिलते हैं:न केवल चैनल और संदेश, बल्कि विशेष पैटर्न जो मेल खाते थे - चूंकि ग्राहक कई चैनलों या पैटर्न पर सुन सकते हैं।

साइड नोट:PUBLISH की प्रदर्शन विशेषताएँ

रेडिस में प्रत्येक कमांड में एक प्रलेखित समय जटिलता होती है, और अधिकांश समय ये जटिलताएं सहज होती हैं। चूंकि PUBLISH ऑपरेशन बहुत आसान लगता है (लगभग SET . की तरह) ) कोई यह मान सकता है कि इसकी जटिलता O(1) है। वास्तव में PUBLISH . की समय जटिलता ग्राहकों के व्यवहार के अनुसार रैखिक रूप से बढ़ता है।

जब PUBLISH कमांड चलता है, इसे चैनल से मेल खाने वाले सभी पैटर्न के माध्यम से कदम उठाना चाहिए और सभी ग्राहक जिन्हें संदेश प्राप्त करना चाहिए, जिसके परिणामस्वरूप O(N+M) की समय जटिलता होती है।

PUBLISH . की जटिलता के कारण अधिकांश परिनियोजन कभी भी प्रदर्शन संबंधी किसी समस्या का अनुभव नहीं करेंगे , लेकिन समय के साथ उस कमांड के प्रदर्शन को ट्रैक करना अभी भी बुद्धिमानी है - सावधान रहें यदि आपका कोड स्वचालित रूप से सुनने के लिए चैनलों के पैटर्न उत्पन्न करता है।

आपका कोड यहां है?

हम रेडिस पब/सब का उपयोग करके बनाए गए ऐप्स के कुछ बेहतरीन उदाहरणों का वॉक-थ्रू पेश करना पसंद करेंगे। यदि आप कुछ अच्छे उदाहरणों के बारे में जानते हैं, तो हमें support@redisgreen.net पर एक नोट भेजें - हम जो कोड देखते हैं उनमें से कुछ को दिखाने के लिए हम अपनी पूरी कोशिश करेंगे।


  1. Redis SUBSCRIBE - रेडिस पब/सब में कई चैनलों की सदस्यता कैसे लें

    इस ट्यूटोरियल में, हम सीखेंगे कि रेडिस-क्ली का उपयोग करके रेडिस मैसेज ब्रोकर सिस्टम में कई चैनलों की सदस्यता कैसे लें। सब्सक्राइब कमांड SUBSCRIBE कमांड का उपयोग क्लाइंट को रेडिस मैसेज ब्रोकर सिस्टम में एक या अधिक निर्दिष्ट चैनलों को सब्सक्राइब करने के लिए किया जाता है। एक बार जब क्लाइंट सब्सक्राइब

  1. रेडिस जेडिस पब उप- जेडिस लाइब्रेरी का उपयोग करके पब/सब सिस्टम को कैसे कार्यान्वित करें

    इस ट्यूटोरियल में, हम सीखेंगे कि जेडिस लाइब्रेरी का उपयोग करके रेडिस पब सब सिस्टम को कैसे लागू किया जाए। जेडिस लाइब्रेरी जेडिस रेडिस डेटास्टोर के लिए जावा क्लाइंट लाइब्रेरी है। यह छोटा और उपयोग करने में बहुत आसान है, और रेडिस 2.8.x, 3.x.x और ऊपर के डेटास्टोर के साथ पूरी तरह से संगत है। आप यहां जेड

  1. रोकू पर चैनल को अनब्लॉक करने का तरीका जानें - 2022 गाइड

    रोकू एक लोकप्रिय स्ट्रीमिंग डिवाइस है जो उपयोगकर्ताओं को बिना किसी बाधा के टीवी पर सामग्री स्ट्रीम करने की अनुमति देता है। यह एक शक्तिशाली स्ट्रीमिंग स्टिक है जो आपके पारंपरिक टेलीविजन को स्मार्ट टीवी में बदल देती है। Roku डिवाइस विभिन्न मॉडलों में विभिन्न विशिष्टताओं के साथ उपलब्ध हैं जो आपको ऑन-ड