最近在做一个投票项目,就是简单的将票数加一就好,但是不得不考虑高并发请求下导致的刷票,票数错误等情况。并发控制使用了基于Redis的incr命令
Redis Incr 命令 Redis Incr 命令将 key 中储存的数字值增一。 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
基于Incr的特性,PHP控制每秒钟的请求数代码为:
/** * 一秒钟 限制并发 */ private function limitConcurren($key,$limit = 1){ $concurren_key = "limitConcurren:".$key."_".time(); $count = $this->Redis->incr($concurren_key); if($count > $limit){ return true; //超过每秒限制请求数 } $this->Redis->expire($concurren_key,60); return false; //未超 }