无法从memcached返回缓存的项目?

时间:2012-11-29 00:50:09

标签: c# memcached

我只是在我网络上的ubuntu系统上设置memcached。没有更改任何选项,所以一切都是默认的。我想尝试使用Enyim连接到服务器。它不会失败,但当我尝试检索项目时,它们始终为空。我不是很低级不会,但我之前已经能够从wireshark中辨别出来,所以我决定尝试一下。我无法辨别任何东西,但我注意到第一个.Store()命令我发送了实际发送的网络数据包到正确的地址。每个.Store()命令都没有做任何事情。

这是我的app.config:

                   

             

                                                  

我试过“Binary”和& “文本”协议和他们做了同样的事情。

这是我的c#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Enyim.Caching;
using Enyim.Caching.Configuration;
using Enyim.Caching.Memcached;

namespace MemCacheTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            //var config = new MemcachedClientConfiguration();
            //config.Servers.Add(new IPEndPoint(new IPAddress(new byte[] {10, 0, 0, 1}), 11211));
            //config.Protocol = MemcachedProtocol.Binary;

            var mc = new MemcachedClient();
            for (var i = 0; i < 100; i++)
               mc.Store(StoreMode.Set, "Hello", "World");
            mc.Store(StoreMode.Set, "MyKey", "Hello World");
            Console.WriteLine(mc.Get("MyKey"));
            Console.WriteLine("It should have failed!!!");

            Console.ReadLine();

        }

    }
}

有谁知道最新情况或我如何确定错误?我觉得很奇怪,我没有得到任何例外,所以我在配置文件中设置了一个无效的IP地址。相同的结果。

2 个答案:

答案 0 :(得分:1)

简短回答:如果您的服务正在运行,请检查您的端口,它应该以某种方式被阻止。 (你在Ubuntu防火墙(iptables)中为端口11211添加了一个例外吗?)

telnet 10.0.0.1 11211如果您的服务器上有telnet客户端,则会显示该端口无法访问。

即使端口无法访问,Enyim也不会抛出错误。是的,这很奇怪。

答案 1 :(得分:1)

添加到dasun的答案。默认情况下安装memcached时,其配置为仅侦听“lo / localhost”接口。它是唯一的安全内存。即使您尝试在本地telnet并指定lo接口,例如:

telnet 10.0.0.1 11211

它会失败。要解决此问题,您必须进入memcached.conf文件并注释掉

# -l 127.0.0.1 

然后重新启动服务