【问题标题】:memcached (spymemcached) counters and expiry timememcached (spymemcached) 计数器和到期时间
【发布时间】:2012-08-21 07:49:22
【问题描述】:

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

方法

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

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

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

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

【问题讨论】:

    标签: java memcached spymemcached


    【解决方案1】:

    int exp 将覆盖现有的过期时间,并“碰撞”您递增的密钥。查看protocol docs 了解更多信息。

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

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

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

    【讨论】:

    • 提到的协议文档声明incr/decr不接收expr参数也不以任何方式影响ttl,这有点令人费解:)
    【解决方案2】:

    来自the comments in the source code

    在有新条目的情况下设置过期时间。

    所以,我怀疑def 中传递的标志和expr 时间仅在密钥丢失的情况下使用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多