1

我正在尝试跨多个服务器分配缓存。我已经在 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>
4

1 回答 1

2

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

于 2012-11-06T05:53:59.720 回答