Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Ví dụ trong việc sử dụng RedisStore trong socket.io

nhưng tôi không hiểu cách sử dụng RedisStore trong mã đó sẽ khác với việc sử dụng MemoryStore như thế nào. Ai đó có thể giải thích cho tôi được không?

Sự khác biệt là khi sử dụng MemoryStore mặc định , bất kỳ thông báo nào mà bạn phát ra trong một worker sẽ chỉ được gửi đến các máy khách được kết nối với cùng một worker, vì không có IPC giữa các worker. Sử dụng RedisStore , thông báo của bạn sẽ được xuất bản lên máy chủ redis, nơi mà tất cả nhân viên của bạn đang đăng ký. Do đó, thông báo sẽ được thu nhận và phát đi bởi tất cả nhân viên và tất cả các khách hàng được kết nối.

Ngoài ra, sự khác biệt giữa việc định cấu hình socket.io để sử dụng redisstore so với việc tạo ứng dụng redis của riêng bạn và thiết lập / lấy dữ liệu của riêng bạn là gì?

Tôi không quen thuộc với RedisStore , và vì vậy tôi không chắc về tất cả sự khác biệt. Nhưng tự mình làm sẽ là một thực hành hoàn toàn hợp lệ. Trong trường hợp đó, bạn có thể xuất bản tất cả thư lên máy chủ redis và lắng nghe những thư đó trong trình xử lý ổ cắm của bạn. Nó có thể sẽ có nhiều công việc hơn cho bạn, nhưng bạn cũng sẽ có nhiều quyền kiểm soát hơn đối với cách bạn muốn thiết lập nó. Tôi đã tự mình làm điều gì đó tương tự:

// 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();
  });
});

Điều này cũng có nghĩa là bạn phải tự mình chăm sóc định tuyến tin nhắn nâng cao hơn, chẳng hạn như bằng cách xuất bản / đăng ký các kênh khác nhau. Với RedisStore , bạn nhận được chức năng đó miễn phí bằng cách sử dụng các kênh socket.io (io.sockets.of("channel").emit(...) ).

Một hạn chế lớn có thể xảy ra với điều này là các phiên socket.io không được chia sẻ giữa các công nhân. Điều này có thể có nghĩa là sẽ có vấn đề nếu bạn sử dụng bất kỳ phương tiện di chuyển kéo dài nào.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. có thể gọi các hàm lua được định nghĩa trong các tập lệnh lua khác trong redis không?

  2. Độ dài tên có ảnh hưởng đến hiệu suất trong Redis không?

  3. Dịch vụ Redis

  4. triển khai bộ nhớ cache ngoài quy trình bằng Redis trong windows azure

  5. Redis Pub / Sub ServiceStack, hủy chuỗi