public class SpCodeCache {
private static Map<String,Long> spCodeMap=new HashMap<>();
public static synchronized boolean isSpCodeMap(String spCode) {
if(spCodeMap==null){
spCodeMap=new HashMap<>();
}
Long res = spCodeMap.get(spCode);
if(res == null || System.currentTimeMillis() - res > 5000){
spCodeMap.put(spCode , System.currentTimeMillis());
return true;
}else{
return false;
}
}
public static synchronized void removeSpCode(String spCode) {
spCodeMap.remove(spCode);
}
}
写一个缓存,存放一个值防止频繁操作,5秒内不能再次请求。
第一次进来放到缓存中,再次进来的时候,和第一次进来的值进行对比,若是同一值,且小于5秒,则不能访问,不同值可以继续执行
过于频繁操作的限制
boolean flag = SpCodeCache.isSpCodeMap(settles.get(0).getSpCode());
if(!flag){
return new OpenResultObject<String>("2005", "操作过于频繁,请稍后再试!", "");
}
Map<String, Object> combine = openMessageService.combine(settles);
SpCodeCache.removeSpCode(settles.get(0).getSpCode());