2

互联网上似乎没有关于 Enyim Increment 方法的信息或文档。我无法弄清楚它在做什么。该文档指出:

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

“将指定键的值增加给定的数量。操作在服务器上以原子方式发生。”

如果我能让它工作,这听起来很好。

尽管没有人有很多明确的答案,但共识似乎是该方法应该将值设置为给定的默认值,如果密钥不存在于 memcached 中。但是,我一生都无法获得存储默认值的密钥。

我不想使用(存储+增量)组合,因为它需要在多服务器架构中使用,我不能保证操作是原子的。

关于如何成功增加 memcached 键的值的任何想法或指示?一个超级奖励是让默认值也有时间。

编辑:我在“文本”和“二进制”协议中都试过这个,似乎无法让它在任一设置中设置默认值。

在此先感谢您的帮助!

4

1 回答 1

2

这篇文章可能有点老了,但这里是使用 Enyim memcacheD 处理增量命令的代码片段。

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

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

在上面的示例中,键的初始值 mykey 已设置为 5。请注意,该值必须是字符串格式的整数(“5”而不是 5)。

第二行将值加 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 回答