2

インターネットには、Enyim Increment メソッドに関する情報やドキュメントがほとんどないようです。私はそれが何をしているのかよくわかりません。ドキュメントには次のように記載されています。

 Increment(string key, ulong defaultValue, ulong delta);

「指定されたキーの値を指定された量だけ増やします。操作はサーバー上でアトミックに行われます。」

私がそれを機能させることができれば、これはすべてうまくいきます。

誰も多くの明確な答えを持っていませんが、コンセンサスは、キーが memcached に存在しない場合、メソッドが値を指定されたデフォルト値に設定することになっているようです。ただし、デフォルト値に保存するキーを取得することは一生できません。

(ストア + インクリメント) コンボはマルチサーバー アーキテクチャ全体で使用する必要があり、操作がアトミックであることを保証できなかったため、使用したくありません。

memcached キーの値を正常にインクリメントする方法に関するアイデアや指針はありますか? スーパーボーナスは、デフォルト値にも存続時間があることです。

編集:「テキスト」プロトコルと「バイナリ」プロトコルの両方でこれを試しましたが、どちらの設定でもデフォルト値を設定できないようです。

助けてくれてありがとう!

4

1 に答える 1

2

この投稿は少し古いかもしれませんが、Enyim memcacheD を使用して Increment コマンドを処理するコード スニペットを次に示します。

        client.Store(StoreMode.Set, "mykey", "5");

        var incrementedValue = client.Increment("mykey", 2, 1);

上記の例では、キー mykey の初期値は 5 に設定されています。値は文字列形式の整数でなければならないことに注意してください( 5 ではなく "5" )。

2 行目は値を 1 ずつ増やします。キーが存在しない場合は、値を増やしずに 2 に設定します。

次のスニペットでは、TTL オーバーロードを使用しています。

            //initial set, considering that the key did not exist before, the value will be 5
            //and it will be valid for 6 seconds
            var initialValue = client.Increment("mykey", 5, 1, TimeSpan.FromSeconds(6));
            Console.WriteLine(initialValue); //5
            //this will increament the value by 1, keeps it in cache for 10 seconds
            var incremented = client.Increment("mykey", 5, 1, TimeSpan.FromSeconds(10));
            var cachedData = client.Get("mykey");
            Console.WriteLine(cachedData); //6
            Thread.Sleep(11*1000);
            var cachedData_afterExpiry = client.Get("mykey");
            Console.WriteLine(cachedData_afterExpiry??"NULL");//this should be null 
于 2015-01-04T07:54:21.487 に答える