【问题标题】:How can I atomically add a new key to google appengine's memcache?如何以原子方式向 google appengine 的 memcache 添加新密钥?
【发布时间】:2012-12-31 10:32:32
【问题描述】:

我想自动添加一个新的密钥到 google appengine 的 memcache 服务使用 Java API。这意味着如果 key 已经存在于 memcache 中,则 put 操作应该失败(例如抛出异常或返回 false ),从而防止并发添加(这将导致覆盖)到 memcache。

我不明白如何使用 getIdentifiable / putIfUntouched 对方法来实现这一点。此外,synchronize 也无济于事,因为我想控制我的 servlet 不同实例之间的并发性。

【问题讨论】:

  • “防止并发添加”是什么意思?有几种可能的策略:如果存在则不写入,如果存在则覆盖,或者如果存在则触发异常。
  • 为什么不同步块进行添加?
  • 如果存在就不要写,否则触发异常将是我想要的。本质上,我要防止的是覆盖(如果存在)。
  • synchronize 不会做我想做的事,我想,因为我想控制我的 servlet 不同实例之间的并发添加。

标签: java google-app-engine concurrency memcached


【解决方案1】:

您想使用 SetPolicy.ADD_ONLY_IF_NOT_PRESENT ,它只会在键不存在时写入值。

boolean put(java.lang.Object key,
      java.lang.Object value,
      Expiration expires,
      MemcacheService.SetPolicy policy)

返回值会告诉你一个值是否已经存在。

【讨论】:

    猜你喜欢
    • 2021-02-23
    • 2019-04-12
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多