2012-02-28 2 views
1

구아바는 매우 유용합니다.구아바는 xmemcached의 [incr] 메소드와 같은 메소드를 지원합니까?

지금, 나는 기간에 액세스 카운터에 대한 제한을 구현하려는. (한 시간 예를 들어 최대 3 번 사람들이 그것을 할 수 있습니다)

사용 구아바의 mapMarker 또는 캐시가 .... 매우 간단합니다 (같은 memcached 사용),하지만지도에서 카운터를 늘릴 때 몇 가지 문제가 발생합니다.

guava가 memcache와 같이 incr 연산을 지원합니까? 지도의 값이 정수일 때? 아니면 새로운 유틸리티 클래스를 만드십시오 ...

답변

2

일반 정수 대신 Semaphore (link)을 저장할 수 있습니다. 방법 tryAcquire()을보십시오. 허가 수를 정기적으로 재설정하려면 drain()release()의 조합을 사용할 수 있습니다. 짧은 기간 동안 허가를 배수가 문제가있는 경우, 당신은 또한 AtomicInteger을 사용하고 같은 것을 할 수있는 :

1) get()
2 현재 값을 들여다) 가능한 할당량이 여전히 존재하는 경우를 시도 하나 할당량을 취득 compareAndSet(oldValue, oldValue + 1)을 수행하여
값이 성공적으로 업데이트되면 (즉, true가 반환되는 경우) 스레드가 진행될 수 있습니다. 그렇지 않은 경우 스레드는 (1)을 다시 시도해야합니다.
4) 허가 수를 재설정하려면 set()

+0

오, 세마포어 내 필요를 잘 충족, 감사합니다! – robi

0

저는 구아바가 현재 이와 같은 속도 제한 용 API를 개발하고 있다고 생각합니다. 아마도 구아바 12로 만들지는 않겠지 만, 13이나 14가 적당 할 것 같습니다.

0

정수 값이있는 경우 가장 최근에 출시 된 AtomicLongMap을 사용하고 싶을 것입니다.

관련 문제