在AppEngine中安全地处理并发Memcache保存

时间:2017-12-08 12:34:29

标签: java multithreading google-app-engine memcached

我的应用程序中有很多线程试图在memcache中放入相同的密钥。我需要做的是,一旦一个线程设法放入该密钥,那么没有其他线程可以再次放置该密钥。

我遇到过memCache提供的一些机制,比如putIFUnTouched,我试图这样使用:

IdentifiableValue value = memCache.getIdentifiable("item_id");
mc.putIfUnTouched("item_id", null, "user_id"); 

但它给了我这个例外:oldValue mustn't be null

我还发现了CAS,我现在很困惑在这种情况下我需要使用哪一个。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我找到了答案:

memCache.put("key", "object", Expiration.byDeltaSeconds(10000), MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT);