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

Примери за използване на RedisStore в socket.io

но не разбирам как използването на RedisStore в този код би било различно от използването на MemoryStore. Може ли някой да ми обясни?

Разликата е, че когато използвате MemoryStore по подразбиране , всяко съобщение, което излъчвате в работник, ще бъде изпратено само до клиенти, свързани със същия работник, тъй като няма IPC между работниците. Използване на RedisStore , вашето съобщение ще бъде публикувано на Redis сървър, за който всички ваши работници се абонират. По този начин съобщението ще бъде взето и излъчено от всички работници и всички свързани клиенти.

Също така каква е разликата между конфигурирането на socket.io да използва redisstore спрямо създаването на свой собствен клиент на redis и задаване/получаване на свои собствени данни?

Не съм запознат отблизо с RedisStore , така че не съм сигурен за всички разлики. Но да го направите сами би било напълно валидна практика. В този случай можете да публикувате всички съобщения на сървър за redis и да слушате тези във вашия манипулатор на сокет. Вероятно ще бъде повече работа за вас, но също така ще имате повече контрол върху това как искате да го настроите. Аз самият съм правил нещо подобно:

// Publishing a message somewhere
var pub = redis.createClient();
pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));

// Socket handler
io.sockets.on("connection", function(socket) {
  var sub = redis.createClient();
  sub.subscribe("messages");
  sub.on("message", function(channel, message) {
    socket.send(message);
  });

  socket.on("disconnect", function() {
    sub.unsubscribe("messages");
    sub.quit();
  });
});

Това също означава, че трябва да се погрижите сами за по-разширено маршрутизиране на съобщения, например чрез публикуване/абониране за различни канали. С RedisStore , получавате тази функционалност безплатно, като използвате socket.io канали (io.sockets.of("channel").emit(...) ).

Потенциално голям недостатък на това е, че сесиите на socket.io не се споделят между работниците. Това вероятно ще означава проблеми, ако използвате някой от транспортите с дълга анкета.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis е конфигуриран да запазва RDB моментни снимки, но в момента не може да се запази на диск - Ubuntu Server

  2. Как да работим с двойки потребител и сокет с node.js + redis

  3. Има ли някакъв механизъм за заключване в Azure Redis Cache, докато актуализирате елемент?

  4. Как да активирам TLS за Redis 6 на Sidekiq?

  5. expire redis кеш ключ в определени часове, а не в продължителност