首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enyim Memcached客户端不写/读数据

Enyim Memcached客户端不写/读数据
EN

Stack Overflow用户
提问于 2010-12-17 13:12:50
回答 2查看 8.5K关注 0票数 11

我已经将memcached作为服务安装在Windows上,侦听默认端口11211。我知道这是可行的,因为我可以告诉服务器并执行get / set命令,没有任何问题。

然后我下载了Enyim客户机(Enyim.Caching.dll,Version2.7)并编写了一个简单的测试程序:

代码语言:javascript
复制
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,5791错误Enyim.Caching.Memcached.MemcachedNode (null) - System.IO.IOException:从套接字'172.23.0.100:11211‘读取失败。错误: TimedOut 2010-12-17 14:26:37,626 1警告Enyim.Caching.Memcached.MemcachedNode.InternalPoolImpl (null) -标记节点172.23.0.100:11211为死

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-17 15:12:09

玩了一个多小时后,我找到了答案。我使用Wireshark查看进出服务器的网络流量。我注意到在使用Enyim客户端时,这些消息与使用telnet时完全不同。特别是,在使用Enyim客户端时,我无法读取穿过电线的协议命令。

因此,我得出结论,Enyim客户端正在使用不同的协议。

在版本1.4中,向memcached服务器添加了第二个协议,即二进制协议。在此之前,只支持文本协议。我可以为memcached找到的最新Windows二进制文件是来自果冻的二进制文件,它仅为1.2.6版本。

Enyim客户端被配置为默认使用二进制协议,由于无法理解,因此我的服务器忽略了该协议。

我在我的测试程序中添加了以下一行,然后立即开始工作:

代码语言:javascript
复制
mcc.Protocol = MemcachedProtocol.Text;
票数 19
EN

Stack Overflow用户

发布于 2011-09-21 22:01:56

我在上面也遇到了同样的问题。我也很难找到一个更新版本的memcached for Windows,但最终还是找到了。

我已经将指向最新二进制文件的链接与其他有用的资源这里放在一起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4470758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档