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/