java - guava支持xmemcached的[incr]方法吗?

标签 java guava

Guava 非常有用。

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

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

Guava可以像memcache一样支持incr操作吗?当map的值为整数时?或者为此创建一个新的实用程序类...

最佳答案

您可以存储信号量 ( link ) 而不是普通整数。查看方法 tryAcquire()。要定期重置许可数量,您可以结合使用 drain()release()。如果短时间内耗尽许可证存在问题,您还可以使用 AtomicInteger 并执行如下操作:

1) 使用get()查看当前值
2) 如果仍有可用配额,则尝试通过执行 compareAndSet(oldValue, oldValue + 1) 获取一个配额。
3) 如果值成功更新(即返回true),则允许线程继续。如果不是,线程必须从 (1) 重试。
4) 要重置许可数量,请使用 set()

关于java - guava支持xmemcached的[incr]方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9478102/

相关文章:

java - 下载部分 Guava 库

java - getIfPresent 是否被视为 expireAfterAccess 的 get 操作?

java - 为什么 Java Collections 有 0 或 1 个元素的助手,但没有更多元素?

java - 我如何将一个类的对象链接到 Java 中另一个类的对象?

java |如何从字符串中删除常用词然后连接不常用词?

java - OSGi - 如何使用 FUSE ESB 添加 JVM 参数?

java - 通过递归解决此问题的任何其他更短的方法

Java do-while 详细信息

java - 在 Google Guava (Java) 中,为什么 Iterables.getFirst() 和 getLast() 不一致?

jakarta-ee - 将 Jersey 2.1 与 CDI 一起使用