【问题标题】:Problems with a Redis-based notification system基于 Redis 的通知系统的问题
【发布时间】:2011-12-26 03:03:59
【问题描述】:

根据this question 的答案,我设法使用 Redis 为我的网站构建了一个通知流。 Web 客户端上的每个“动作”都会为每个感兴趣的用户(关注者、发表评论者等)“记录”。使用轮询每隔几秒就会收到未决通知。

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

当我在一台机器上打开多个客户端时,问题就出现了。只有第一个会显示通知,因为它是从 redis 中弹出的。

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

有什么简单的选择吗?

【问题讨论】:

标签: java notifications nosql redis


【解决方案1】:

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

然后,每个 Web 客户端都可以为他们已经拥有的通知维护一个序列 ID 号。因此,在每次民意调查中,您只需检查是否有基于更改序列 ID 的新通知。此外,您可以使用有序集合并在集合中存储通知,而不是使用过期键,然后您可以根据序列 id 获取所需的所有通知,并且不时清除集合中的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2013-07-24
    • 2016-08-28
    • 2019-08-04
    • 1970-01-01
    • 2012-03-13
    • 2015-01-09
    相关资源
    最近更新 更多