如果我想构建一个 RSS 阅读器,那么在 MySQL 中插入所有提要对于数据库服务器来说太重了,CPU 密集型。
那么拥有一个带有 Apache 的 Redis 或 cassandra、MySQL 服务器是否有助于减少 mysql 服务器的负载?
最佳答案
简短回答:是的,但它会增加复杂性。
长答案:如果 MySQL 对你来说不够快(我会首先验证这实际上是在增加 Redis 的复杂性之前的情况),你可以抛出一些更频繁的更新/插入负载到 Redis 上。有几种方法可以做到这一点(您不必在这里做所有事情,但每件事都会帮助您减轻负担):
为每个用户提供一个 Redis 发布/订阅 channel 。 每当有内容添加到用户的提要时直接发布到该 channel 。让 RSS 客户端订阅此 channel ,因此如果用户打开了他或她的 RSS 阅读器,他们应该只订阅他们的发布/订阅 channel 以获取更新,而不是从 MySQL 中阅读。
批量插入MySQL:如果您的写入量很大,请不要忍受每次添加新内容时插入MySQL的网络流量和锁定/解锁以及查询开销到饲料。相反,将所有新项目保存在每个用户的缓存中。然后清空缓存并每 n 秒执行一次批量写入。根据您的用例需要将 n 设置得尽可能高。
缓存每个用户的提要:如果尽管#1 你的读取量非常高,在 Redis 中缓存每个用户的最后 n 个项目 m 秒(设置 n 和 m 以适合你的使用案子)。缓存这些的最佳方式很可能是作为字符串。如果出于某种原因您需要更多动态访问,请使用列表。然后,只有当缓存不可用时,用户才应从 MySQL 读取数据。
关于redis - 构建 RSS 阅读器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18342165/