我有这样一个接口,一个用户5秒内只能响应一个请求。
先创建一个concurrenthashmap
使用concurrenthashmap.putIfAbsent(userid,time)
若添加成功则请求响应,否则就是丢弃这个请求,然后程序的finally{}
里根据时间remove(userid)
.这样能实现这个问题吗?你们有什么好的解决方法,自己项目里的这个需求暂时不考虑用redis和zookeeper
我有这样一个接口,一个用户5秒内只能响应一个请求。
先创建一个concurrenthashmap
使用concurrenthashmap.putIfAbsent(userid,time)
若添加成功则请求响应,否则就是丢弃这个请求,然后程序的finally{}
里根据时间remove(userid)
.这样能实现这个问题吗?你们有什么好的解决方法,自己项目里的这个需求暂时不考虑用redis和zookeeper
4 回答1.3k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答718 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
ConcurrentHashMap lastRequestMap = ...
long now = System.currentTimeMillis()
Long lastRequestTime = lastRequestMap.get(userid)
if(lastRequestTime != null && lastRequestTime > now - 5秒钟) {
}
lastRequestMap.put(userid, now)
......