.net - Stackexchange.Redis 的 fire and forget 是否保证交付?

标签 .net redis stackexchange.redis

据我所知,CommandFlags.FireAndForget 适用于您不关心响应的情况。

即使响应对正在运行的应用程序不重要,它是否也能保证交付?

最佳答案

实际上,Redis 协议(protocol)并不真正支持“即发即弃”操作。除了 pub/sub 流量,所有 Redis 命令都匹配一个回复,没有办法告诉 Redis 服务器省略回复。

现在一些客户端(如 StackExchange.Redis)通过协议(protocol)的异步实现来模拟“即发即弃”模式。实际上,StackExchange.Redis 中的“即发即弃”模式与“异步”模式非常相似,只是在收到回复时简单地将其丢弃。

可靠吗?好吧,只要 TCP/IP 保证交付,它就保证交付。网络会努力传输数据包(如果部分数据包丢失,最终会重新传输数据包),但这全部由 TCP 处理。

现在,如果服务器宕机,或决定关闭连接,客户端只有在尝试从套接字读取数据时才会知道。 StackExchange.Redis 可能会愉快地继续在死连接上发送命令一段时间。如果您有中间层(例如 Twemproxy),情况可能会更糟。

换句话说,“即发即弃”的流量通常会被发送到服务器,网络上不会丢失任何消息,但如果您有服务器或连接问题,一些流量可能会在客户端收到请求之前丢失有机会注意到它。我会称之为尽力而为的行为。

关于.net - Stackexchange.Redis 的 fire and forget 是否保证交付?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25593894/

相关文章:

.net - Oracle - 参数化查询有 EXECUTIONS = PARSE_CALLS

node.js - 如何在实时添加对象时从 Redis 中弹出对象?

c# - StackExchange.Redis 如何连接到 Sentinel

Azure Redis 缓存与 Azure 上的 Redis 云服务

c# - 为什么从 Redis 中提取键和哈希值这么慢?

.NET 的 HttpClient 限制

c# - 为什么我在 listView1 上没有属性项?

.net - 使用 NHibernate 缓存多个数据库的 SessionFactory 和配置

redis - 在 Redis 中清除控制台(shell)

javascript - Kue worker 与 createClientFactory : only subscriber commands may be used