今天跟我一位朋友讨论一个防止表单二次提交的问题,他是考虑用 redis,我的解决方案是在本地使用锁来保证请求在处理完成之前同一用户的其他请求会被忽略,代码如下:
private static final Set<String> LOCK_SET = new CopyOnWriteArraySet<>();
public String execute(){
...
synchronized (this) {
if (LOCK_SET.contains(uuid)) {
return "failed";
}
LOCK_SET.add(uuid);
}
...
}
然后就跟他杠上了,他的看法是当其他用户的请求来时会被锁住等待,用 redis 更快。
而我的看法是这个问题用 redis 有点太大材小用了,我认为在这个情况下等待锁的时间是远远小于连接 redis 的开销的。
有大神能帮忙解答一下吗,感激不尽。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.