هناك الكثير من سيناريوهات التطبيق لـ Redis. الآن اسمحوا لي أن أقدم واحدة من ميزاتها الرئيسية ، نشر الاشتراك (Pub/Sub).
مقدمة الميزة:
ما هو اشتراك النشر لـ Redis (Pub/Sub)؟ وظيفة Pub/Sub (تعني النشر ، الاشتراك) هي وظيفة النشر والاشتراك. في الأنظمة المستندة إلى الأحداث ، يتم استخدام Pub/Sub حاليًا على نطاق واسع. يعتمد الأحداث كآلية اتصال أساسية لتوفير نموذج تفاعل مزدوج بشكل فضفاض المطلوب من قبل الأنظمة واسعة النطاق: يعبر المشترك (مثل العميل) عن حدث أو نوع من الحدث الذي يهتم بتلقيه في شكل اشتراك في الحدث ؛ يمكن للناشر (مثل الخادم) إخطار المشتركين المعنيين بالأحداث التي يهتم بها المشترك في أي وقت. يجب أن يفهم الأصدقاء الذين يعرفون أنماط التصميم أن هذا يشبه إلى حد كبير نمط المراقب بين أنماط التصميم الـ 23.
وبالمثل ، فإن Pub/Sub's Redis هو وضع اتصال للرسالة ، والغرض الرئيسي هو إلغاء تعويض ناشر الرسائل ومشترك الرسائل. كخادم حانة/فرعي ، يلعب Redis وظيفة توجيه الرسائل بين المشتركين والناشرين.
إذا كنت لا تفهم التفسير المهني أعلاه ، فهذا لا يهم ، لكنني لا أفهمه كثيرًا.
ببساطة ، هناك أيضًا مفهوم للقناة هنا ، مما يعني القناة. على سبيل المثال ، إذا قمت بالاشتراك في قناة مصرفية ، عندما تتغير أموالك ، فستقبل أن البنك سيرسل لك معلومات من خلال قناته. هنا ، تتلقى بشكل سلبي ، بدلاً من أن تطلب من البنك الحصول على معلومات. في هذا المثال ، أنت فرعي (مشترك) ، والبنك هو PUB (PUB).
سيناريوهات تطبيق المشروع:
اعتقدت دائمًا أنه قبل أن تعرف نفس التكنولوجيا ، يجب أولاً أن تفهم أين سيتم استخدام مثل هذه التكنولوجيا ولا يمكنك تعلم الأشياء بشكل أعمى.
عند رؤية ميزة نشر الاشتراكات ، فهي مثالية لصنع نظام دردشة مباشر بسيط. هذا واحد منهم ، بالطبع ، مثل هذه الأشياء نادراً ما تشارك في تطورنا. اسمحوا لي أن أعطيك سيناريو شائع الاستخدام. في الهندسة المعمارية الموزعة لدينا ، نواجه في كثير من الأحيان سيناريوهات الانفصال عن القراءة والكتابة. أثناء عملية الكتابة ، يمكنك استخدام Redis لنشر الاشتراكات ، بحيث يتم نشر القيم المكتوبة لكل برنامج قراءة في الوقت المناسب ، مما يضمن الاتساق الكامل للبيانات. على سبيل المثال ، في موقع مدونة ، يشترك 100 من المعجبين إليك. عندما تنشر مقالة جديدة ، يمكنك دفع الرسائل إلى معجبيك. باختصار ، هناك العديد من المشاهد ويجب استكشافها. .
راجع كيف تعمل Java Redis:
Redis هي قاعدة بيانات ذاكرة التخزين المؤقت ، وهي أيضًا بنية C/S ، أي العميل والخادم. بشكل عام ، في Java ، عادة ما نستخدم Jedis (العميل) لتشغيل Redis (Server). عند التشغيل ، يجب إنشاء اتصال بين الاثنين. تمامًا مثل رابط قاعدة البيانات ، في قاعدة بيانات علائقية ، نحافظ عمومًا على تجمع اتصال لتحقيق إعادة استخدام الارتباط ، وذلك لتوفير الوقت لإنشاء الاتصالات وإغلاقها. لذلك ، في Jedis ، هناك أيضًا مفهوم لـ Jedispool (تجمع اتصال Jedis) ، ونحن جميعًا نستخدم الاتصالات من المسبح.
على الرمز:
إذا كنت ترغب في استخدام Jedis ، فستقدم أولاً التبعيات
<Rependency> <roupiD> redis.clients </groupId> <StifactId> jedis </stifactId> <soph> 2.9.0 </version> </sependency>
إنشاء ناشر (ناشر)
يمتد ناشر الفئة العامة الخيط {Private Final Jedispool Jedispool ؛ الناشر العام (Jedispool Jedispool) {this.jedispool = jedispool ؛ } Override public void run () {bufferedReader reader = new BufferEdReader (new inputStreamReader (system.in)) ؛ jedis jedis = jedispool.getResource () ؛ // جلب اتصال من تجمع الاتصال بينما (true) {string line = null ؛ حاول {line = reader.ReadLine () ؛ if (! // ادفع رسالة من قناة MyChannel} آخر {break ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }}}}إنشاء مشترك آخر
يمتد مشترك الفئة العامة Jedispubsub {Public Cumpriber () {} Override public void onMessage (قناة السلسلة ، رسالة السلسلة) {// تلقي رسالة ومكالمات system.out.println (string.format ("تلقي رسالة تم نشرها ، القناة ٪ s" ، القناة ، الرسالة))) ؛ } Override public void OnSubscribe (قناة السلسلة ، int supcridedChannels) {// unsubsected to the القناة سوف يستدعي system.out.println (string.format ("Conscribe Redis Scarwing ، Channel ٪ S ، ConsultChannels ٪ d" ، Channel ، ConscribedChannels)) ؛ } Override public void onUnsubscribe (قناة سلسلة ، int supcridedChannels) {// unsubscribed سوف call system.out.println (string.format ("unsubscribe redis channel ، channel ٪ s ، succebedchannels ٪ d" ، قناة ، مشتركانيلز)) ؛ }}هنا ، يحتاج المشتركون إلى ورث Jedispubsub لإعادة كتابة أساليبها الثلاث. تم كتابة التعليق الغرض ، إنه بسيط للغاية.
نحن فقط نحدد المشترك هنا ، ونذهب إلى قناة الاشتراك أدناه.
يمتد الفئة الفرعية للطبقة العامة الخيط {Private Final Jedispool Jedispool ؛ مشترك المشترك النهائي الخاص = مشترك جديد () ؛ قناة سلسلة نهائية خاصة = "mychannel" ؛ subthread العامة (Jedispool Jedispool) {super ("subthread") ؛ this.jedispool = jedispool ؛ } Override public void run () {system.out.println (string.format ("redis الاشتراك ، القناة ٪ s ، سيتم حظر مؤشر الترابط" ، القناة)) ؛ جيديس جيديس = فارغة ؛ حاول {jedis = jedispool.getResource () ؛ // قم بإخراج اتصال jedis.subscribe (مشترك ، قناة) ؛ // الاشتراك من خلال API الاشتراك ، المعلمة هي اسم المشترك واسم القناة} catch (استثناء e) {system.out.println (string.format ("خطأ قناة subrcibe ، ٪ s" ، e)) ؛ } أخيرًا {if (jedis! = null) {jedis.close () ؛ }}}}أخيرًا ، اكتب فئة اختبار أخرى وقم بتشغيلها. أدخل رسالة على لوحة المفاتيح وسيؤدي المشترك إلى تشغيل طريقة OnMessage
الفئة العامة PubSubDemo {public static void main (string [] args) {// connect the Redis Server Jedispool Jedispool = New Jedispool (New JedispoolConfig () ، "127.0.0.1" ، 6379) ؛ System.out.println (string.format ("Redis Pool is st reg ، redis ip s ، redis port ٪ d" ، "127.0.0.1" ، 6379)) ؛ sub -brathread = subthread جديد (jedispool) ؛ // المشترك subthread.start () ؛ Publisher Publisher = New Publisher (Jedispool) ؛ // Publisher Publisher.start () ؛ }}انظر نتائج الطباعة
قم بإرفاق عنوان الرمز https://github.com/fangyong1421/redis
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.