互联网似乎完全没有关于Enyim Increment方法的信息或文档。我无法弄清楚它在做什么。文档说明:
Increment(string key, ulong defaultValue, ulong delta);
“按给定的数量增加指定键的值。操作在服务器上以原子方式发生。”
如果能让它发挥作用,这听起来都很好。
虽然没有人有很多明确的答案,但共识似乎是该方法应该将值设置为给定的默认值,如果密钥不存在于memcached中。但是,我不能为我的生活获得一个存储到默认值的密钥。
我不想使用(store + increment)组合,因为它需要在多服务器架构中使用,我不能保证操作是原子的。
有关如何成功增加memcached密钥值的任何想法或指示?超级奖金也是默认值也有生存时间。
编辑:我在“文本”和“二进制”协议中尝试了这一点,似乎无法在任一设置中设置默认值。
提前感谢您的帮助!
答案 0 :(得分:2)
这篇文章可能有点旧,但这里是使用Enyim memcacheD来处理Increment命令的代码片段。
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