Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在Redis中构建“消息读取”类型队列系统的解决方案?_Mysql_Algorithm_Architecture_Redis - Fatal编程技术网

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

Mysql 在Redis中构建“消息读取”类型队列系统的解决方案?,mysql,algorithm,architecture,redis,Mysql,Algorithm,Architecture,Redis,我不完全确定Redis是否是实现此类功能的最佳工具,但我认为这是可能的。很多时候,您希望向所有用户发送一条消息。几乎就像一个全系统的新闻条目。您希望确保用户不会多次看到此消息,他们应该在登录时只看到一次,然后在发布新条目之前,他们不应该看到该新闻部分 我认为在MySQL中保留一个表,为用户每次读取消息时设置一个布尔列,这是一种低效的方法。你不能真的像那样存档一个表,因为如果你这样做了,你就不知道用户读了哪些消息,哪些没有 如果使用Redis pub/sub完全在内存中完成这项工作,那就太好了。对

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

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


如果使用Redis pub/sub完全在内存中完成这项工作,那就太好了。对于消息读取类型系统,有哪些策略?

当然,您可以利用Redis pub/sub功能,也可以对comet使用socket.io–服务器将消息向下推送到客户端。如果这就是你想要做的,我可以详细说明一下,但是我不能完全确定这个系统对于你的用例来说是否需要那么复杂。使用pubsub/comet从前端到后端实现这一切并不是一件容易的任务,尽管这是可行的,有时也是必需的/正确的解决方案

一个可能也适合你的简单方法怎么样:

创建一个带有创建日期时间字段的新闻表。在用户表中添加last_seen_news_date字段,将所有用户的日期设置为过去的某个日期

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

select * from news where creation_date > last_seen_news_date_of_user
然后用当前日期时间或最新新闻文章的日期时间更新最近一次看到的新闻日期