在Redis中构建“消息读取”类型队列系统的解决方案?

时间:2011-10-11 02:53:44

标签: mysql algorithm architecture redis

我不完全确定Redis是这类产品的最佳工具,但我认为这是可能的。很多时候,您希望向所有用户发送消息。几乎像一个系统范围的新闻条目。您希望确保用户不会多次看到此消息,他们只应在登录时看到此消息,之后他们在新条目发布之前永远不会看到该消息部分。

我认为在MySQL中保留一个表,每次用户读取消息时都会设置一个布尔列,这是一种低效的方法。你无法真正存档这样的表,因为如果你这样做,你就不会知道用户已阅读哪些消息以及哪些消息没有。

如果可以使用Redis pub / sub完全在内存中完成,那将是很棒的。消息读取类型系统有哪些策略?

1 个答案:

答案 0 :(得分:0)

当然你可以利用redis pub / sub功能,也许可以使用socket.io作为彗星 - 服务器将消息推送到客户端。如果这就是你想做的事情,我可以详细说明一下,但我不完全确定系统是否必须对你的用例来说那么复杂。使用pubsub / comet实现从前端到后端的所有操作并不是一件容易的事,尽管可行,有时需要/正确解决问题。

对于一个可能对你有用的更简单的方法怎么样:

使用news日期时间字段创建creation_date表。在last_seen_news_date表中添加user字段,将所有用户设置为过去的某个日期。

当用户加载页面时,查询新闻项目如下:

select * from news where creation_date > last_seen_news_date_of_user

然后使用当前日期时间或最新新闻文章的日期时间更新last_seen_news_date