【问题标题】:Redis Stale DataRedis 陈旧数据
【发布时间】:2014-11-22 01:36:34
【问题描述】:

我是 Redis 的新手。我正在设计一种发布/订阅机制,其中每个客户端(业务客户端)都有一个特定的频道,至少有一个用户(浏览器)连接。然后,这些用户会收到他们所属客户的信息。

我需要 Redis,因为我有一个分布式系统,所以存在一个将数据推送到相应客户端通道的后端,然后存在一个 webapp,它有自己的服务器(多个实例)来保存用户连接(websockets)。

恢复中:

  • 后端是发布者,webapp 服务器是订阅者
  • 一个客户有多个用户
  • 每个客户端一个通道,至少连接 1 个用户
  • 如果客户端没有连接的用户,则不存在通道
  • 后端将数据推送到每个现有的客户渠道
  • Webapp 服务器使用来自与连接到自身的用户相对应的客户端通道的数据。

因此,为了减少工作量,我不想从我的后端将数据推送到没有连接用户的客户端。所以似乎我需要将连接用户列表从我的 Web 应用程序共享到我的后端,以便后端可以决定哪些客户端数据推送到 Redis。共享该数据的明显解决方案是同一个 Redis 实例。

我的方法是在 Redis 中使用类似这样的键:

[用户User1/ClientA/WebappServer1, User2/ClientB/WebappServer1, User3/ClientA/WebappServer2]

所以我的问题来了……

如果我的一个 Webapps 节点崩溃并且它没有机会从 Redis 中删除与其连接的用户列表,我该如何克服陈旧数据?强>

非常感谢!

【问题讨论】:

    标签: redis


    【解决方案1】:

    首先,祝整个项目好运 - 听起来既充满挑战又有趣 :)

    我会使用稍微不同的设计来跟踪我的用户 - 让每个客户端/Web 应用程序维护一组(可能以登录时间作为分数排序)他们的用户。为 set 设置一个 TTL 并让客户端/webapp 定期重置它,否则如果拥有进程崩溃,它将过期。

    【讨论】:

    • 感谢 Itamar 的建议。我最终所做的是为每个连接了用户的客户端设置一个过期时间为几分钟的密钥,然后每个 Webapp 节点定期重置该过期时间。然后,后端仅将数据发布到具有相应密钥的客户端。
    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多