2014-01-06 37 views
2

我正在用java构建一个推送服务器,并且正在计划使用Redis PubSub来排列要发送给客户端的消息。Jedis许多用户

现在我的实现每个设备都有一个redis订户。因此,当设备上线时,它会为其设备订阅redis队列。

这个比例是否合适/有没有更好的方法?我会有成千上万的订户。

回答

2

每个设备的用户应该正常工作。我认为扩展性问题主要围绕你发布给每个订阅者的信息以及消息实际存在的位置。您可能还需要考虑在某些时候运行多个Redis实例,可能由Redis Sentinel管理,以确保高可用性。如果主服务器不可用,则Redis Sentinel将处理提升其中一个从服务器redis实例的权限,然后在原来的主服务器返回时赶回主服务器并赶上。

如果消息对每个用户都是唯一的,那么发送消息给每个用户似乎是一个好方法。请注意,redis中的pub/sub不提供持久性,所以如果我的用户断开连接或崩溃或返回,自从上次订阅以来发送的所有消息都无法提供给他。如果您需要持久性,那么消息应该可能会转到每个订户的LIST,并且在通道上发布的内容应该只是通知客户端新消息可用。用户可以随时从LIST中弹出任何消息,直到LIST为空。任何时候收到通知时都会重复此过程。

如果一条消息正在广播给所有或许多客户端,那么您应该考虑将消息本身存储在redis密钥或列表或其他内容中,并在每个受影响客户端的频道上发布新消息可用和哪里(什么关键)来阅读它。您可以使用多种策略来追踪哪些订阅者阅读过哪些邮件并删除所有人阅读的旧邮件。