มีสถานการณ์แอปพลิเคชันมากเกินไปสำหรับ Redis ตอนนี้ให้ฉันแนะนำหนึ่งในคุณสมบัติที่สำคัญเผยแพร่การสมัครสมาชิก (Pub/Sub)
แนะนำคุณสมบัติ:
การสมัครสมาชิกสำนักพิมพ์สำหรับ Redis (Pub/Sub) คืออะไร? ฟังก์ชั่นผับ/ย่อย (หมายถึงเผยแพร่สมัครสมาชิก) เป็นฟังก์ชั่นการเผยแพร่และการสมัครสมาชิก ในระบบที่ใช้เหตุการณ์ปัจจุบัน PUB/SUB เป็นรูปแบบการสื่อสารที่ใช้กันอย่างแพร่หลาย มันใช้เหตุการณ์เป็นกลไกการสื่อสารขั้นพื้นฐานเพื่อจัดทำแบบจำลองการโต้ตอบแบบคู่ที่จำเป็นโดยระบบขนาดใหญ่: สมาชิก (เช่นลูกค้า) เป็นการแสดงออกถึงเหตุการณ์หรือประเภทของเหตุการณ์ที่สนใจในการรับในรูปแบบของการสมัครสมาชิก ผู้เผยแพร่ (เช่นเซิร์ฟเวอร์) สามารถแจ้งสมาชิกที่เกี่ยวข้องเกี่ยวกับเหตุการณ์ที่สมาชิกสนใจได้ตลอดเวลา เพื่อนที่คุ้นเคยกับรูปแบบการออกแบบควรเข้าใจว่าสิ่งนี้คล้ายกับรูปแบบผู้สังเกตการณ์ในรูปแบบการออกแบบ 23 รูปแบบ
ในทำนองเดียวกันผับ/ย่อยของ Redis เป็นโหมดการสื่อสารข้อความวัตถุประสงค์หลักคือการคลายตัวพิมพ์ข้อความและสมาชิกข้อความ ในฐานะที่เป็นเซิร์ฟเวอร์ผับ/ย่อย Redis เล่นฟังก์ชั่นของการกำหนดเส้นทางข้อความระหว่างสมาชิกและผู้เผยแพร่
หากคุณไม่เข้าใจคำอธิบายระดับมืออาชีพข้างต้นมันไม่สำคัญ แต่ฉันไม่เข้าใจมากนัก
พูดง่ายๆก็มีแนวคิดของช่องที่นี่ซึ่งหมายถึงช่อง ตัวอย่างเช่นหากคุณสมัครสมาชิกช่องธนาคารเมื่อเงินของคุณเปลี่ยนไปคุณจะยอมรับว่าธนาคารจะส่งข้อมูลผ่านช่องทางของคุณ ที่นี่คุณได้รับอย่างอดทนแทนที่จะขอข้อมูลธนาคาร ในตัวอย่างนี้คุณเป็นย่อย (สมาชิก) และธนาคารคือผับ (ผับ)
สถานการณ์แอปพลิเคชันโครงการ:
ฉันมักจะคิดว่าก่อนที่คุณจะรู้เทคโนโลยีเดียวกันคุณต้องเข้าใจก่อนว่าจะใช้เทคโนโลยีดังกล่าวและคุณไม่สามารถเรียนรู้สิ่งต่าง ๆ ได้อย่างสุ่มสี่สุ่มห้า
การดูคุณลักษณะของการสมัครสมาชิกการเผยแพร่มันเหมาะสำหรับการสร้างระบบแชทสดอย่างง่าย แน่นอนว่านี่คือหนึ่งในนั้นสิ่งเหล่านี้ไม่ค่อยมีส่วนร่วมในการพัฒนาของเรา ให้ฉันให้สถานการณ์ที่ใช้กันทั่วไปอีกครั้ง ในสถาปัตยกรรมแบบกระจายของเราเรามักจะพบกับการอ่านและเขียนสถานการณ์การแยก ในระหว่างกระบวนการเขียนคุณสามารถใช้ REDIS เพื่อเผยแพร่การสมัครสมาชิกเพื่อให้ค่าที่เป็นลายลักษณ์อักษรถูกเผยแพร่ไปยังแต่ละโปรแกรมการอ่านในเวลาที่เหมาะสมเพื่อให้มั่นใจถึงความสอดคล้องที่สมบูรณ์ของข้อมูล ตัวอย่างเช่นในเว็บไซต์บล็อกแฟน ๆ 100 คนสมัครสมาชิกคุณ เมื่อคุณโพสต์บทความใหม่คุณสามารถส่งข้อความถึงแฟน ๆ ของคุณ ในระยะสั้นมีหลายฉากและจำเป็นต้องสำรวจ -
ตรวจสอบวิธีการที่ Java ดำเนินการ Redis:
Redis เป็นฐานข้อมูลแคชซึ่งเป็นโครงสร้างของ C/S นั่นคือไคลเอนต์และเซิร์ฟเวอร์ โดยทั่วไปแล้วใน Java เรามักจะใช้ Jedis (ไคลเอนต์) เพื่อใช้งาน REDIS (เซิร์ฟเวอร์) เมื่อดำเนินการจะต้องมีการเชื่อมต่อระหว่างทั้งสอง เช่นเดียวกับลิงก์ฐานข้อมูลในฐานข้อมูลเชิงสัมพันธ์โดยทั่วไปเรารักษากลุ่มการเชื่อมต่อเพื่อให้ได้การใช้ลิงก์ซ้ำเพื่อประหยัดเวลาในการสร้างและปิดการเชื่อมต่อ ดังนั้นในเจไดส์ยังมีแนวคิดของ Jedispool (Jedis Connection Pool) และเราทุกคนใช้การเชื่อมต่อจากสระว่ายน้ำ
บนรหัส:
หากคุณต้องการใช้เจดิสคุณจะแนะนำการพึ่งพาก่อน
<Ederency> <sderctId> redis.Clients </groupId> <ratifactid> Jedis </artifactid> <version> 2.9.0 </Serve> </perdency>
สร้างสำนักพิมพ์ (สำนักพิมพ์)
ผู้จัดพิมพ์ชั้นเรียนสาธารณะขยายเธรด {ส่วนตัว Jedispool Jedispool; สำนักพิมพ์สาธารณะ (Jedispool Jedispool) {this.jedispool = Jedispool; } @Override โมฆะสาธารณะ Run () {bufferedReader reader = ใหม่ bufferedReader (ใหม่ inputStreamReader (System.In)); Jedis Jedis = Jedispool.getResource (); // ดึงการเชื่อมต่อจากพูลการเชื่อมต่อในขณะที่ (จริง) {สตริงบรรทัด = null; ลอง {line = reader.readline (); if (! "ออก" .Equals (บรรทัด)) {jedis.publish ("mychannel", line); // กดข้อความจากช่อง MyChannel} else {break; }} catch (ioexception e) {e.printstacktrace (); -สร้างสมาชิกอื่น
ผู้สมัครสมาชิกระดับสาธารณะขยาย Jedispubsub {สมาชิกสาธารณะ () {} @Override โมฆะสาธารณะ onMessage (ช่องสตริงข้อความสตริง) {// รับข้อความและระบบโทร. println (string.format ("รับข้อความ Redis ที่เผยแพร่ } @Override โมฆะสาธารณะ onsubscribe (ช่องสตริง, int สมัครสมาชิก {// unsubscribed ไปยังช่องจะเรียก System.out.println (String.format ("สมัครสมาชิก Redis Channel Success, Channel %S, SubcribedChannels %D" } @Override โมฆะสาธารณะ onunsubscribe (ช่องสตริง, int สมัครสมาชิก {// unsubscribed จะเรียก system.out.println (string.format ("ยกเลิกการสมัคร REDIS channel, ช่องทาง %S -ที่นี่สมาชิกจำเป็นต้องสืบทอด Jedispubsub เพื่อเขียนสามวิธี ความคิดเห็นที่มีวัตถุประสงค์ถูกเขียนมันง่ายมาก
เราเพิ่งกำหนดสมาชิกที่นี่และไปที่ช่องการสมัครสมาชิกด้านล่าง
Subthread ระดับสาธารณะขยายเธรด {ส่วนตัว Jedispool Jedispool; ผู้สมัครสมาชิกขั้นสุดท้ายส่วนตัว = สมาชิกใหม่ (); channel สตริงสุดท้ายส่วนตัว = "mychannel"; Public Subthread (Jedispool Jedispool) {super ("subthread"); this.jedispool = Jedispool; } @Override โมฆะสาธารณะเรียกใช้ () {system.out.println (string.format ("สมัคร Redis, ช่องทาง %s, เธรดจะถูกบล็อก", ช่อง)); Jedis Jedis = Null; ลอง {jedis = jedispool.getResource (); // นำการเชื่อมต่อ jedis.subscribe (สมาชิกช่องทาง); // สมัครสมาชิกผ่าน API สมัครสมาชิกพารามิเตอร์คือสมาชิกและชื่อช่อง} catch (Exception E) {System.out.println (String.format ("ข้อผิดพลาดช่องทางย่อย, %s", e); } ในที่สุด {ถ้า (jedis! = null) {jedis.close (); -ในที่สุดเขียนคลาสทดสอบอื่นและเรียกใช้ ป้อนข้อความบนคีย์บอร์ดและสมาชิกจะเรียกใช้วิธีการ onMessage
Pubsubdemo ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (String [] args) {// เชื่อมต่อกับเซิร์ฟเวอร์ Redis Jedispool Jedispool = New Jedispool (ใหม่ Jedispoolconfig (), "127.0.0.1", 6379); System.out.println (String.format ("Redis Pool เริ่มต้น, Redis IP %S, Redis Port %D", "127.0.0.1", 6379)); subthread subthread = ใหม่ subthread (jedispool); // สมาชิก subthread.start (); สำนักพิมพ์สำนักพิมพ์ = สำนักพิมพ์ใหม่ (Jedispool); // Publisher Publisher.start (); -ดูผลการพิมพ์
แนบรหัสที่อยู่ https://github.com/fangyong1421/redis
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น