控制服务器处理请求的数量(高并发)-防止用户重复点击导致多次请求
2017-11-17 15:05
543 查看
private final AtomicInteger tick = new AtomicInteger();
@ResponseBody
@RequestMapping(value = "/url", method = { RequestMethod.POST })
public String geturl(参数) {
try {
if (waitInLine()) {
return 告诉用户现在系统处理能力不足,稍候再试;
}
// 判断是否重复点击
if (isFrequently(memberId)) {
return 告诉用户不要重复点击按钮,系统正在处理上一次的请求;
}
//业务代码
return 业务代码后的返回结果;
}
} catch (Exception e) {
return CommonConstant.gson.toJson(packetResult);
} finally {
//一定要写finally
tick.decrementAndGet();
}
}
/**
* 判断是否超出处理范围
*
* @return
*/
private boolean waitInLine() {
return tick.incrementAndGet() > 1000;//表示系统最多同时处理1000个请求
}
/**
* 判断是否提交过频繁
*
* @param memberId
* 会员id
* @return
*/
public boolean isFrequently(String memberId) {
ShardedJedis jedis = null;
try {
jedis = RedisFactory.getJedis();
if (CommonUtils.isNull(jedis.get(memberId))) {
jedis.set(memberId, "");
jedis.expire(memberId, 1);//1秒后标记就消失
} else {
return true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
RedisFactory.returnResource(jedis);//回收连接
}
return false;
}
@ResponseBody
@RequestMapping(value = "/url", method = { RequestMethod.POST })
public String geturl(参数) {
try {
if (waitInLine()) {
return 告诉用户现在系统处理能力不足,稍候再试;
}
// 判断是否重复点击
if (isFrequently(memberId)) {
return 告诉用户不要重复点击按钮,系统正在处理上一次的请求;
}
//业务代码
return 业务代码后的返回结果;
}
} catch (Exception e) {
return CommonConstant.gson.toJson(packetResult);
} finally {
//一定要写finally
tick.decrementAndGet();
}
}
/**
* 判断是否超出处理范围
*
* @return
*/
private boolean waitInLine() {
return tick.incrementAndGet() > 1000;//表示系统最多同时处理1000个请求
}
/**
* 判断是否提交过频繁
*
* @param memberId
* 会员id
* @return
*/
public boolean isFrequently(String memberId) {
ShardedJedis jedis = null;
try {
jedis = RedisFactory.getJedis();
if (CommonUtils.isNull(jedis.get(memberId))) {
jedis.set(memberId, "");
jedis.expire(memberId, 1);//1秒后标记就消失
} else {
return true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
RedisFactory.returnResource(jedis);//回收连接
}
return false;
}
相关文章推荐
- 防止用户多次点击按钮,导致发送多次请求或者其他问题。
- 防止在服务器处理完成之前用户多次点击提交按钮处理代码
- 防止用户多次点击导致重复提交数据的问题
- 防止用户连续多次点击提交请求,防止对服务器造成负担
- 防止在服务器处理完成之前用户多次点击提交按钮处理代码
- 如何防止在服务器处理完成之前用户多次点击提交按钮(转)
- 连接的用户过多 导致此错误的原因是:Web 服务器忙,因通信量过大而无法处理您的请求。
- 防止用户多次点击按钮导致页面被多次提交
- 后端处理高并发状态的多次重复请求
- iOS 防止UIButton 连续点击导致请求多次的问题!
- 防止用户多次点击提交方法一:在js中的处理
- 关于Asp.Net中避免用户连续多次点击按钮,重复提交表单的处理
- 关于Asp.Net中避免用户连续多次点击按钮,重复提交表单的处理
- 如何防止用户不小心多次点击按钮导致多次提交
- 连接的用户过多 导致此错误的原因是:Web 服务器忙,因通信量过大而无法处理您的请求。
- iOS 点赞机制(防止按钮重复点击触发多次请求)
- js中防止连续点击按钮导致多次重复提交数据的方法
- 连接的用户过多 导致此错误的原因是:Web 服务器忙,因通信量过大而无法处理您的请求。
- 防止按钮的重复点击导致的请求的重复响应
- 关于Asp.Net中避免用户连续多次点击按钮,重复提交表单的处理