2012-02-28 8 views
1

Guavaは非常に便利です。guavaはxmemcachedの[incr]メソッドのようなメソッドをサポートしていますか?

さて、私は期間中にアクセスカウンタの制限を実装したい。(例えば、最大の人々がそれを行うことができます1時間で3回)

使用グァバのmapMarkerまたはキャッシュが非常に簡単です....(のようなmemcachedを使用して)、しかし、私はいくつかの同時の問題を満たす場合は、マップ内のカウンタを増加させる。

guavaはmemcacheのようにincr操作をサポートしていますか?マップの値が整数のとき?または、新しいutilクラスを作成してください。

答えて

2

通常の整数の代わりにSemaphorelink)を格納できます。方法tryAcquire()を見てください。定期的に許可数をリセットするには、drain()release()の組み合わせを使用できます。短い期間のために許可を排出することは問題がある場合は、AtomicIntegerを使用して、このような何か行うことができます:

1)get()
2との現在の値をPEEK)可能なクォータがまだある場合は、1つのクォータを取得しようcompareAndSet(oldValue, oldValue + 1)を実行します。
3)値が正常に更新された場合(つまり、trueが返された場合)、スレッドは続行されます。そうでない場合、スレッドは(1)から再試行する必要があります。
4)許可の数をリセットするにはset()

+0

ああ、セマフォーが私の必要性を満たしてくれて、ありがとう! – robi

0

私はGuavaが現在このようなレート制限のAPIを開発していると信じています。それはおそらくグアバ12に入ることはないが、13または14は合理的にそう思われる。

0

整数値がある場合は、おそらく、最近リリースされたAtomicLongMapを使用したいと考えています。

関連する問題