Stackexchange.Redis'火上浇油并忘记保证交货吗?

问题描述 投票:8回答:1

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

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

.net redis stackexchange.redis
1个回答
8
投票

实际上,Redis协议并不真正支持“即发即忘”操作。除了发布/子流量,所有Redis命令都与回复匹配,并且无法告诉Redis服务器省略回复。

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

它可靠吗?嗯,它保证了TCP / IP保证交付的交付。网络将尽力传输数据包(如果其中一些数据包丢失,最终会再次传输数据包),但这一切都由TCP处理。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.