redis - 构建 RSS 阅读器

标签 redis

如果我想构建一个 RSS 阅读器,那么在 MySQL 中插入所有提要对于数据库服务器来说太重了,CPU 密集型。

那么拥有一个带有 Apache 的 Redis 或 cassandra、MySQL 服务器是否有助于减少 mysql 服务器的负载?

最佳答案

简短回答:是的,但它会增加复杂性。

长答案:如果 MySQL 对你来说不够快(我会首先验证这实际上是在增加 Redis 的复杂性之前的情况),你可以抛出一些更频繁的更新/插入负载到 Redis 上。有几种方法可以做到这一点(您不必在这里做所有事情,但每件事都会帮助您减轻负担):

  1. 为每个用户提供一个 Redis 发布/订阅 channel 。 每当有内容添加到用户的提要时直接发布到该 channel 。让 RSS 客户端订阅此 channel ,因此如果用户打开了他或她的 RSS 阅读器,他们应该只订阅他们的发布/订阅 channel 以获取更新,而不是从 MySQL 中阅读。

  2. 批量插入MySQL:如果您的写入量很大,请不要忍受每次添加新内容时插入MySQL的网络流量和锁定/解锁以及查询开销到饲料。相反,将所有新项目保存在每个用户的缓存中。然后清空缓存并每 n 秒执行一次批量写入。根据您的用例需要将 n 设置得尽可能高。

  3. 缓存每个用户的提要:如果尽管#1 你的读取量非常高,在 Redis 中缓存每个用户的最后 n 个项目 m 秒(设置 n 和 m 以适合你的使用案子)。缓存这些的最佳方式很可能是作为字符串。如果出于某种原因您需要更多动态访问,请使用列表。然后,只有当缓存不可用时,用户才应从 MySQL 读取数据。

关于redis - 构建 RSS 阅读器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18342165/

相关文章:

hash - Redis HMSET 文档 : What does it mean by 'hash' ?

c# - BookSleeve BlockingRemoveLeft 只返回一些插入列表的项目

redis - 自上次 Redis 更新以来 Lua 脚本出错

python - 如何在 Python 中将整个序列推送到 redis

node.js - 将每个用户的时间戳存储在已排序的 Redis 集合中

node.js - 大量的键值集使Redis连接变慢

redis - 有没有更灵活地使用 redis.expire 的选项?

redis - Redis 中固定大小的排序集?

spring-boot - 使用 spring boot 多次超时时禁用 redis

go - Redis golang 客户端定期丢弃错误的 PubSub 连接 (EOF)