gpt4 book ai didi

ruby - 为在线好友列表扩展 Redis

转载 作者:可可西里 更新时间:2023-11-01 11:12:16 27 4
gpt4 key购买 nike

我无法思考如何使用 Ruby 和 Redis(或任何 NoSQL 解决方案)实现在线好友列表,就像任何聊天 IM,即 Facebook 聊天一样。我的要求是:

  • 大约 100 万用户
  • DB 只存储用户 friend 的 id(一组整数值)

我正在考虑使用 Redis 集群(实际上我不太了解)并按照 http://www.lukemelia.com/blog/archives/2010/01/17/redis-in-practice-whos-online/ 的思路实现一些东西.

更新:除了可能用于在线好友列表之外,我们的应用程序实际上不会将 Redis 用于任何其他用途。此外,它的写入量确实不高(我预计我们的大部分查询都会被在线 friend 阅读)。

最佳答案

Redis DB Google Groups 中讨论了这个问题之后,我提出的解决方案(受 this article 启发)是 SADD 我所有的在线用户到一个集合中,并为我的每个用户创建一个 user:#{user_id}: friends_list 并将他们的 friend 列表存储为另一组。每当用户登录时,我都会SINTER 用户的好友列表和当前在线用户集。由于我们读的很重而不是写很重,所以我们将使用单个主节点进行写操作。为了使其可扩展,我们将有一个从主节点复制的从节点集群,我们的应用程序将使用简单的循环算法来执行 SINTER

Josiah Carlson建议采用更完善的方法:

  1. When a user X logs on, you intersect their friends set with the online users to get their initial online set, and you keep it with a Y-minute TTL (any time they do anything on the site, you could update the expire time to be Y more minutes into the future)
  2. For every user in that 'online' set, you find their similar 'initial set', and you add X to the set
  3. Any time a user Z logs out, you scan their friends set, and remove Z from them all (whether they exist or not)

关于ruby - 为在线好友列表扩展 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10440482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com