Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Implementasi pub/sub di nodeJS

Untuk persistensi objek, saya menambahkan Redissupport menggunakan node_redis. Kemudian saya mengganti loop client.send pada array saluran dengan Redis pub/sub sebagai lapisan abstraksi. Tetapi saya menyadari bahwa saya perlu membuat klien Redis baru untuk setiap pengguna yang berlangganan. Dan saya masih perlu menyimpan informasi klien socket.io untuk mengirim pesan ke publikasi. Seberapa terukur itu? Apakah ada implementasi lain (lebih baik) atau pengoptimalan lebih lanjut yang dapat saya lakukan? Apa yang akan kamu lakukan?

Ya, Anda harus membuat klien redis baru untuk setiap permintaan io. Ini berat dan tidak terukur. Tetapi membuat koneksi klien redis baru tidak menghabiskan banyak memori. Jadi jika jumlah pengguna sistem Anda tidak lebih dari 5000 maka tidak apa-apa. Untuk skala, Anda dapat menambahkan server slave redis untuk menyelesaikan publikasi dan berlangganan yang berat dan jika Anda khawatir akan membuat banyak koneksi maka Anda dapat meningkatkan uLIMIT OS Anda.

Anda tidak perlu menyimpan klien socket.io dalam pesan yang dikirim. Setelah redis menerima pesan saluran berlangganan. Ini akan mengirim pesan ke klien io tertentu.

subscribe.on("message",function(channel,message) { 
 var msg = { message: [client.sessionId, message] }; 
 buffer.push(msg);
 if (buffer.length 15) buffer.shift(); 
 client.send(msg); > });

Untuk berlangganan multi saluran. Saya menyarankan Anda untuk melakukan pra-penyimpanan semua pengguna dengan lebih dari satu saluran (Anda dapat menggunakan penyimpanan Mongodb atau redis).

var store = redis.createClient();
var subscriber= redis.createClient()

store.hgetall(UID, function(e, obj){
     subscriber.subscribe(obj.ChannelArray.toArray());
 })


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara tercepat untuk menyimpan array numpy di redis

  2. Redis:mungkinkah kedaluwarsa elemen dalam array atau set yang diurutkan?

  3. Diurutkan set ukuran tetap di Redis?

  4. Publikasikan berlangganan dengan nodejs dan redis(node_redis)

  5. spring-redis tidak dapat terhubung ke host jarak jauh