用于存储关注者/关注用户的 MySQL 与 Redis

标签 mysql redis scalability social-networking event-driven

我正在尝试找到存储关注者/关注用户数据的最佳候选者, 我最初想将它存储在 Redis 中用户 -> 用户 ID 集的集合中,但后来我想到了一个用户有超过 100 万甚至 1000 万关注者的场景,Redis 将如何处理如此庞大的集合?我也无法在 redis 中对集合进行分页,我必须检索整个集合,如果用户想浏览跟随他的人,这将不起作用。 如果我将它存储在 MySQL 中,我肯定可以进行分页,但是每当我必须构建用户提要时,从数据库中获取 1000 万条记录可能需要很长时间,我可以以旧的批处理方式执行此操作,但每当拥有许多关注者的用户会发布一些内容,然后处理这 1000 万条记录将花费很长时间才能获取他的关注者。 将它存储在 MySQL 中用于分页(主要是前端)和在 Redis 中用于构建事件提要的事件驱动消息传递是否值得?

最佳答案

是否使用redis 或mysql 来完成此任务是个人决定。对于那 1000 万条记录,两者都没有问题。

MySQL 具有 LIMIT x,y 命令,用于从数据库中获取关注者的子集。

对于 Redis,您可以使用排序集并使用关注者的用户 ID 或用户开始关注的时间作为排序集的分数。和 MySQL 一样,redis 支持获取大型排序集的子集。

关于用于存储关注者/关注用户的 MySQL 与 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15607084/

相关文章:

Redis超时问题

node.js - 在高负载下,Node.js 的可伸缩性是否会因为垃圾收集而受到影响?

mysql - 在 Windows 上使用 OpenSSL 从源代码编译 MySQL

amazon-web-services - 如何从 VPN 访问 AWS ElastiCache (Redis)

php - Zend Framework DB_TABLE 中的 mySQL 语句

redis - 如果 master 在给定时间内关闭,则杀死 Redis Slave

java - 可扩展的 ruby 应用程序

java - Java 中的线程安全双向关联

MySQL 选择和限制计算复杂度

php - 仅当另一列匹配时才更新记录?