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