Redis
 sql >> база данни >  >> NoSQL >> Redis

Pub/sub реализация в nodeJS

За устойчивост на обекта добавих Redissupport, използвайки node_redis. След това замених цикъла client.send върху масива от канали с Redis pub/subas слой на абстракция. Но забелязах, че трябва да създам нов клиент на Redis за всеки потребител, който е направил абонамент. И все още имах нужда да съхранявам клиентска информация за socket.io, за да изпращам съобщения при публикуване. Колко мащабируемо е това? Има ли други (по-добри) реализации или допълнителни оптимизации, които мога да направя? Какво бихте направили?

Да, трябва да създадете нов клиент на redis за всяка заявка за io. Той е тежък и не може да се мащабира. Но създаването на нова клиентска връзка на Redis не консумира много памет. Така че, ако броят на потребителите на вашата система не е повече от 5000, тогава е добре. За да мащабирате, можете да добавите подчинен redis сървър, за да разрешите тежкото публикуване и абониране и ако сте загрижени за създаването на много връзки, тогава можете да увеличите ОС ULIMIT.

Не е необходимо да съхранявате socket.io клиента в изпратеното съобщение. След повторното получаване на съобщение за абониран канал. Той ще изпрати съобщение до конкретен io клиент.

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

За да се абонирате за много канали. Предлагам ви да съхраните предварително всички потребители с повече от един канал (Можете да използвате хранилище Mongodb или 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. Може ли някой да обясни командата redis setbit?

  2. Елемент от списъка Redis Pop По брой елементи

  3. _http_server.js:192 throw new RangeError(`Невалиден код на състоянието:${statusCode}`);

  4. Функция на клавишите Redis за съвпадение с множество шаблони

  5. ZRANGESTORE преди Redis 6.2.0