2

谁能告诉我(或指向一些文档)memcached 计数器是如何工作的?具体来说:它们如何过期?我正在使用 java spymemcached 客户端。

方法

net.spy.memcached.MemcachedClient.incr(String key, int by, long def, int exp) 

接受一个参数“exp”,描述为“这个对象的过期时间”

这是否意味着对柜台的每个单独呼叫都有自己的到期时间?还是调用 incr 会影响密钥的到期时间?

另外,不应该有一种方法来获取计数器值吗?或者我应该以 0 的增量调用 incr?

4

2 回答 2

2

int exp将覆盖现有的到期时间,并“碰撞”您递增的密钥。查看协议文档以获取更多信息。

另外,不应该有一种方法来获取计数器值吗?或者我应该以 0 的增量调用 incr?

您可以使用MemcachedClient.get方法获取计数器单元格的值。需要先设置计数器单元格,MemcachedClient.set然后才能增加它。我不是 100% 确定,但是一些库会在递增之前自动将计数器单元设置为 0。

关于到期时间的说明。如果int expr-1memcached 将使用之前的过期时间。如果int expr大于2592000(30 天),则将其视为 UNIX 时间戳。

于 2012-08-21T14:16:25.420 回答
0

源代码中的注释

如果有新条目,请设置到期时间。

所以,我怀疑传入的标志defexpr时间都只在密钥丢失的情况下使用。

我发现代码很难理解,因为我不是 Java 程序员,但这个 foo似乎执行如下操作:如果 incr(key,value) 失败,尝试执行 add(key,value,def,expr) 如果这个也失败了,然后再次尝试 incr(key,value) 。

于 2015-05-08T22:09:13.813 回答