1

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

这是我的 app.config:

我已经尝试过“二进制”和“文本”协议,他们做了同样的事情。

这是我的 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 地址。结果相同。

4

2 回答 2

1

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

telnet 10.0.0.1 11211

它会失败。要修复,您必须进入 memcached.conf 文件并注释掉

# -l 127.0.0.1 

然后重启服务

于 2012-11-30T04:35:12.733 回答
1

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

telnet 10.0.0.1 11211如果您的服务器上有 telnet 客户端,这将显示端口不可访问。

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

于 2012-11-29T08:57:50.243 回答