gpt4 book ai didi

c# - Enyim Memcached Client 不写/读数据

转载 作者:可可西里 更新时间:2023-11-01 08:38:59 24 4
gpt4 key购买 nike

我在 Windows 上安装了 memcached 作为一项服务,监听默认端口 11211。我知道这是可行的,因为我可以远程登录到服务器并执行 get/set 命令而不会出现任何问题。

然后我下载了 Enyim Memcached 客户端(Enyim.Caching.dll,版本 2.7)并编写了一个简单的测试程序:

var mcc = new MemcachedClientConfiguration();
mcc.AddServer("127.0.0.1:11211");
mcc.SocketPool.ReceiveTimeout = new TimeSpan(0, 0, 10);
mcc.SocketPool.ConnectionTimeout = new TimeSpan(0, 0, 10);
mcc.SocketPool.DeadTimeout = new TimeSpan(0, 0, 20);

using (MemcachedClient client = new MemcachedClient(mcc))
{
client.Store(StoreMode.Set, "enyimtest", "test value");
Console.WriteLine(client.Get<string>("enyimtest"));
}

我知道这会正确连接到我的服务器,因为在 telnet 中调用 stats 命令显示连接数增加。但是,它不会调用 get 或 set,因为 cmd_getcmd_set 统计计数器保持不变。对 client.Get 的调用返回 null。

该程序不会以任何方式出错。有谁知道什么可以阻止 Enyim 客户端在这种情况下工作?

编辑:

看起来这是超时造成的。在配置 log4net 以捕获客户端的日志输出后,我发现它包含以下内容(除了其他堆栈跟踪项之外):

2010-12-17 14:26:37,579 [1] ERROR Enyim.Caching.Memcached.MemcachedNode [(null)] - System.IO.IOException: Failed to read from the socket '172.23.0.100:11211'. Error: TimedOut

2010-12-17 14:26:37,626 [1] WARN Enyim.Caching.Memcached.MemcachedNode.InternalPoolImpl [(null)] - Marking node 172.23.0.100:11211 as dead

我还是不明白为什么会超时?

最佳答案

经过大约一个小时的尝试,我找到了答案。我使用 Wireshark 查看进出服务器的网络流量。我注意到在使用 Enyim 客户端时,消息看起来与使用 telnet 时完全不同。特别是,在使用 Enyim 客户端时,我无法读取通过网络传输的协议(protocol)命令。

因此,我断定 Enyim 客户端使用的是不同的协议(protocol)。

memcached服务器在1.4版本中加入了第二个协议(protocol),即二进制协议(protocol)。在此之前,仅支持文本协议(protocol)。我能为 memcached 找到的最新 Windows 二进制文件来自 Jellycan。 , 而且只有1.2.6版本。

Enyim 客户端默认配置为使用二进制协议(protocol),我的服务器只是忽略了它,因为它无法理解。

我将以下行添加到我的测试程序中,一切立即开始工作:

mcc.Protocol = MemcachedProtocol.Text;

关于c# - Enyim Memcached Client 不写/读数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4470758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com