如何在多个服务器之间使用memcached方法分发缓存?

时间:2012-11-05 16:16:20

标签: memcached enyim enyim.caching

我正在尝试跨多个服务器分发缓存。我在2台Linux服务器上安装了Memcached。我正在使用.Net客户端库来操作这些服务器上的缓存。

从配置开始,它始终存储在第一台服务器上。我试图改变服务器的顺序,它只存储在列表中的第一个服务器上。

我使用Putty来检查服务器上是否存在对象。

问题是:

如何同时在两台服务器上存储对象?

如果我想验证此对象是否存储在配置文件

中的所有服务器上

我如何从客户端库中做到这一点?

以下是我的代码示例:

static void Main(string[] args)
{ 
     var mc = new MemcachedClient();
     mc.FlushAll();
     mc.Store(StoreMode.Add, "key1", "some information");            
     Console.WriteLine(mc.Get("key1"));
}

和配置

<enyim.com>
    <memcached>
      <servers>
        <add address="20.23.24.105" port="11211"/>
        <add address="20.23.24.106" port="11211"/>
      </servers>
      <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:10:00" deadTimeout="00:02:00"/>
    </memcached>
  </enyim.com>

1 个答案:

答案 0 :(得分:2)

我不认为可以使用.NET客户端执行此操作,因为这不是Memcached应​​该如何工作的。在内部,客户端将每个密钥哈希到只有一个服务器。如果该服务器发生故障,客户端将在散列未来密钥时将其考虑在内。解决这个问题的一种方法是为每个服务器做一个单独的设置。这将要求您创建两个客户端,一个连接到每个服务器,并发送两次请求。如果.NET客户端提供异步集,那么您可以执行此操作,延迟只与两个集合操作中的最长时间一样长。