用 SpringBoot+Redis 解决海量重复提交问题
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class RepeatSubmitInterceptor implements HandlerInterceptor {
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String token = request.getHeader("token");
if (redisTemplate.opsForValue().get(token) != null) {
// Token存在,表示重复提交
return false;
} else {
// Token不存在,表示第一次提交,存入Redis并设置过期时间
redisTemplate.opsForValue().set(token, "1", 10, TimeUnit.MINUTES);
return true;
}
}
}
这段代码实现了一个简单的拦截器,用于检测请求是否为重复提交。如果请求的header中包含token,并且Redis中已经存在这个token,就认为是重复提交,返回false拦截请求。如果Redis中不存在这个token,就将它添加到Redis中,并设置合适的过期时间,从而允许请求通过,并认为这是第一次提交。这样可以有效地防止用户因为网络问题而导致的重复提交,增加了用户体验。
评论已关闭