投票大量请求处理问题

在做一个投票的程序,用户每天可以投三次。我在后台是这样判断的:判断当前日期该用户的记录数是否超过三条。现在如果我通过前台页面可以拿到投票链接,然后短时间内向服务器发送1000000(就是请求数很大)个请求,这样的话可能会出现当天某个用户的记录数不只三次。这个怎么解决?

阅读 5.1k
4 个回答

使用redis,每次写入前判断当天该用户计数,小于三则写入。redis使用单进程单线程模式,操作都是串行进行,可以满足要求

方案一:事务中使用间隙锁防止幻读

方案二:读取时对每个用户投票纪录只取最早三次

将判断、使用、修改用户的记录数的时候加锁就可以了

楼上说的应该都可以解决这个问题;
说点其他的,没有实践过,也不知道行不行,只是想法,
1、看能不能给投票加一个时间间隔,在一个地方记录上次成功投票的时间戳,然后第二次投票的时候判断时间间隔
2、跟第一个思路差不多,就是在一个地方记录当天的投票次数
然后想了想,这样应该还是存在同样的问题,建议楼主使用楼上说的redis来处理吧,应对起来比较简单

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏