缩放在线好友列表的Redis
我很难考虑如何使用Ruby和Redis(或任何NoSQL解决方案)实现在线好友列表,就像任何聊天IM即Facebook聊天一样。我的要求是:缩放在线好友列表的Redis
- 大约有100个万名用户总量
- DB仅存储用户朋友的IDS(一套整数值)
我想使用Redis的集群(其中我其实并不知道太多),并沿着http://www.lukemelia.com/blog/archives/2010/01/17/redis-in-practice-whos-online/的方向执行。
更新:我们的应用程序真的不会使用Redis作为除了潜在的在线朋友列表之外的任何其他内容。此外,它实际上并不沉重(我预计大部分查询都是在线朋友阅读的)。
回答:
在Redis DB Google Groups讨论这个问题后,我提出的解决方案(由this article启发)是SADD
我所有的在线用户分成一组,并为每个我的用户,我创建了一个user:#{user_id}:friends_list
和存储他们的好友列表作为另一个组。每当用户登录时,我会SINTER
用户的好友列表和当前的在线用户设置。由于我们阅读起来很重,而且写得不重,所以我们会使用一个主节点进行写操作。为了使它的规模,我们不得不从主从复制节点的集群,我们的应用程序将使用一个简单的循环算法做SINTER
提出了一个更精细的方法:
- 当用户X登录时,他们与在线用户 在线用户交集他们的朋友,以获得他们的初始在线设置,并且保留它为Y分钟的TTL(只要他们在网站上执行任何操作,就可以更新 到期时间为将来更多分钟Y)
- 对于每一个用户是“在线”设置,你会发现他们的相似 “初始设置”,并添加X设定的
- 任何时候,使用者z注销,您扫描他们的朋友设置,并删除 ž从他们所有(不管他们是否存在)
回答:
xmpp/jabber呢?他们内置了大量的并发使用和高可靠性,你只需要为用户登录的东西制作一个适配器即可。
回答:
您应该考虑在内存数据网格中,这些平台的目标是提供这种可伸缩性。 并且通常可以轻松地将其部署为任何云硬件上的集群。 请参阅:GigaSpaces XAP,vMware GemFire或Oracle Coherence。 如果您正在寻找免费版XAP提供的社区版。
以上是 缩放在线好友列表的Redis 的全部内容, 来源链接: utcz.com/qa/265902.html