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);

結果 :

  • テストが削除されました: True
  • 真を追加
  • 最初の増分: 0
  • 最初の読み取り: 1
  • 2 番目の増分: 0
  • 2 番目の読み取り: 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 プロジェクトのクローズされた問題の 1 つ (ここ) に説明があります。代わりに、カウンターを 0 だけインクリメントします。

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