>  기사  >  백엔드 개발  >  投票大量请求处理问题

投票大量请求处理问题

WBOY
WBOY원래의
2016-06-06 20:36:33991검색

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

回复内容:

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

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

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

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

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

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.