根据this question的答案,我设法使用Redis为我的网站构建了一个通知流。对于每个用户,Web客户端上的每个“操作”都会被“记录”,这将是每个用户感兴趣的(关注者,评论者等)。挂起的通知每隔几秒钟就会通过轮询进行处理。

由于最初的要求,我使服务器基础结构在获取通知后将其删除(保持Redis快速且内存消耗低很重要)

当我在一台计算机上打开多个客户端时,问题就来了。只有第一个会显示通知,因为此后它会从Redis中弹出。

我考虑了一些解决方案,但是到目前为止,我拥有的唯一合理的解决方案是:而不是删除通知,而是将其设置为在几个小时后过期。当然,除非我想出基于客户端的id或sth,否则服务器将一遍又一遍地向我发送相同的通知,这将无助于解决该问题,但这已经使情况变得过于复杂。

有什么简单的选择吗?

最佳答案

我认为最简单的解决方案是为每个用户维护一个计数器,每次添加通知时将其递增并与通知一起记录。

然后,每个Web客户端可以为它们已经拥有的通知维护序列ID号。因此,在每次轮询时,您都只需要检查是否有基于序列ID更改的新通知即可。此外,您可以使用有序集合并将通知存储在集合中,而不必使用到期键,然后可以根据序列ID获取所有想要的通知,并从设置的时间中不时清除内容

关于java - 基于Redis的通知系统的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8079261/

10-11 22:26
查看更多