首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否支持像xmemcached的[incr]方法那样的方法?

是否支持像xmemcached的[incr]方法那样的方法?
EN

Stack Overflow用户
提问于 2012-02-28 15:40:00
回答 3查看 185关注 0票数 1

芭乐非常有用。

现在,我想在一段时间内实现一个访问计数器的限制。(例如,人们可以在一个小时内最多执行3次)

使用Guava的mapMarker或缓存非常简单…(就像使用memcached),但我在增加map中的计数器时遇到了一些并发问题。

Guava能像memcache一样支持incr操作吗?当map的值是整型时?或者为此创建一个新的util类。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-28 15:54:27

你可以存储一个Semaphore (link)而不是一个普通的整数。看看方法tryAcquire()。对于定期重置许可数量,您可以使用drain()release()的组合。如果在很短的一段时间内耗尽许可证是有问题的,您还可以使用AtomicInteger并执行以下操作:

1)使用get()查看当前值

2)如果还有配额,尝试通过compareAndSet(oldValue, oldValue + 1)获取一个配额。

3)如果值更新成功(即返回true ),则允许线程继续运行。如果不是,线程必须从(1)开始重试。

4)要重置许可证数量,请使用set()

票数 2
EN

Stack Overflow用户

发布于 2012-02-29 02:15:51

我相信Guava目前正在开发一个类似于这样的速率限制的API。它可能不会进入Guava 12,但13或14似乎是合理的可能性。

票数 0
EN

Stack Overflow用户

发布于 2012-02-29 20:36:30

如果您有整数值,那么您可能希望使用最近发布的AtomicLongMap

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9478102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档