redis - 是否可以检测到客户端断开连接?

标签 redis cap-theorem

我正在使用 Redis 实现 RPC 机制。

一个服务器连接到redis并监听请求BLPOP job:queue 0,一个客户端连接并添加一个请求RPUSH job:queue [$job_id, ...]。然后,客户端等待结果 BLPOP job:done:$job_id 0,服务器将结果推送到该队列以供客户端使用。

如果在维修工作期间,例如一旦服务器调用了 BLPOP 并获得了作业的详细信息,服务器就死了,客户端将永远等待响应,但它永远不会到达。

是否有某种方法可以在 Redis 中检测到这种情况,例如服务器接受作业后,崩溃,连接关闭(例如,操作系统关闭了 tcp 套接字)。 Redis 能否发出客户端已断开连接的信号,我们能否使用它来检测作业已被接受但永远不会完成?或者也许除了队列之外,redis 中还有更好的 RPC 机制?

最佳答案

你通常做的实际上是让你的 popping 客户端做一个 BRPOPLPUSH从原始列表到特殊的“我正在处理此列表”。您可以定期让另一个进程扫描特殊列表以检测“丢失”的作业并将它们返回到队列(或您希望实现的任何其他策略)。

关于redis - 是否可以检测到客户端断开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49997082/

相关文章:

redis - 如何从 github 存储库构建 docker 镜像

java - 为什么在使用 Spring Redis 时 JedisConnection 出现 NoClassDefFound 错误

php - 如何使用 erlang 在 Redis 中存储键值对,然后使用 php 访问该存储?

java - 为分散的日历项目选择数据库类型

distributed-system - aerospike 读数的强一致性 - 为什么它们需要政权编号?

symfony - Doctrine 二级缓存 w/Redis

rest - 是否可以将REST和消息传递结合用于微服务?

rdbms - 在 CAP 定理中,缩放的关系数据库会落在什么地方?

redis - StackExchange.Redis SetAdd 行为