根据this question的答案,我设法使用Redis为我的网站构建通知流。 Web客户端上的每个“动作”都会被“记录”给每个用户,对他们来说是有意义的(关注者,帖子后评论者等)。使用轮询每隔几秒就会提取待处理的通知。
由于最初的要求,我让我的服务器基础架构在获取后删除了通知(保持Redis快速且内存消耗很低很重要)
当我在一台计算机上打开多个客户端时,问题就出现了。只有第一个会显示通知,因为它之后会从redis弹出。
我想到了一些解决方案,但到目前为止我唯一合理的解决方案是:我只是将其设置为在几个小时内过期而不是删除通知。当然,这无助于解决服务器一次又一次地向我发送相同通知的问题(因为它没有被删除),除非我想出了基于客户端的ID或者......但是这已经使情况变得太复杂了
任何简单的替代方案?
答案 0 :(得分:1)
我认为最简单的解决方案是为每个用户维护一个计数器,每次添加通知都会增加它并通过通知记录它。
然后,每个Web客户端都可以维护已有的通知的序列ID号。因此,在每次调查中,您只需检查是否有基于序列ID更改的新通知。此外,您可以在集合中使用有序的设置和存储通知,而不是使用过期密钥,然后您可以根据序列ID获取所需的所有通知,并且只是从设置的时间中清除内容