【问题标题】:How can I Increment a memcached value with .NET enyim?如何使用 .NET enyim 增加 memcached 值?
【发布时间】:2014-10-04 15:40:15
【问题描述】:

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

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

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

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

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

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

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

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

提前感谢您的帮助!

【问题讨论】:

    标签: c# .net memcached enyim enyim.caching


    【解决方案1】:

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

            client.Store(StoreMode.Set, "mykey", "5");
    
            var incrementedValue = client.Increment("mykey", 2, 1);
    

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

    第二行将值加1。如果key不存在,则将值设置为2而不加1。

    下面的sn-p使用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 
    

    【讨论】:

    • 这是一个很好的答案。你知道它是否可以与 TTL 一起使用吗?
    • 太棒了。以前没搞懂这个方法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2012-07-03
    • 2012-05-15
    • 2012-06-11
    相关资源
    最近更新 更多