5

我对 ServiceStack.CacheAccess.Memcached 有疑问。MemcachedClientCache. 该Increment方法没有按预期工作。

对于测试,我使用的是常规控制台应用程序和ICacheClient界面。

根据方法文档:

必须先将项目插入缓存,然后才能对其进行更改。
该项目必须作为System.String.
该操作仅适用于System.UInt32values,因此 -1 始终表示未找到该项目。

所以我们开始:

ICacheClient client = new MemcachedClientCache();
string key = "test";
bool result = client.Remove(key);
Console.WriteLine("{0} removed: {1}", key, result);

//The item must be inserted as a System.String.   
result = client.Add(key, "1");
Console.WriteLine("added {0}", result);


long v = client.Increment(key, 1);
Console.WriteLine("first increment : {0}", v);

string o = client.Get<string>(key);
Console.WriteLine("first read: {0}", o);

v = client.Increment(key, 1);
Console.WriteLine("second increment: {0}", v);

o = client.Get<string>(key);
Console.WriteLine("second read: {0}", o);

结果 :

  • 测试已删除:真
  • 添加真
  • 第一个增量:0
  • 初读:1
  • 第二个增量:0
  • 二读:1

如您所见,增量不起作用。

enyim 的配置:

<enyim.com>
  <memcached protocol="Binary">
    <servers>
      <!-- make sure you use the same ordering of nodes in every configuration you have -->
      <add address="memcached-dev1" 
            port="11211" />
    </servers>
    <socketPool minPoolSize="10" 
                maxPoolSize="100" 
                connectionTimeout="00:00:10" 
                deadTimeout="00:02:00" />
  </memcached>
</enyim.com>

我错过了什么吗?

4

1 回答 1

2

您无法以这种方式读取计数器的值,在 Enyim 项目的一个已关闭问题中解释了原因(此处)。相反,只需将计数器增加 0。

var v = cacheClient.Increment(key, 0);
于 2013-08-31T21:56:14.017 回答