Redis 陈旧数据

标签 redis

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

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

恢复:

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

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

我的方法是在 Redis 中使用这样的 key :

[USERS: User1/ClientA/WebappServer1, User2/ClientB/WebappServer1, User3/ClientA/WebappServer2]

那么我的问题来了......

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

非常感谢!

最佳答案

首先,祝整个项目顺利 - 听起来很有挑战性也很有趣 :)

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

关于Redis 陈旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26069762/

相关文章:

node.js - 用于聊天应用程序的nodejs的memcache vs redis

javascript - 从nodejs中的第二个函数获取结果

php - Redis 中的 CRUD 和关系 : How to

java - 使用 RedisTemplate zSet 使用通配符获取所有值并从 Redis 中删除所有值

redis - 如何在网络上通过 ip 集群 redis

ruby-on-rails - Ruby on Rails 和 Redis:未初始化的常量 Redis::Namespace

list - Redis 嵌套键列表

c++ - 高效处理为redis(hiredis)的SET命令创建模板

redis - redigo,SMEMBERS,如何获取字符串

amazon-web-services - 在 AWS 上具有多个实例的 Sails 应用程序 - Redis/Elasticache/ALB