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