PHP使用Redis计数器防止并发请求

最近在做一个投票项目,就是简单的将票数加一就好,但是不得不考虑高并发请求下导致的刷票,票数错误等情况。并发控制使用了基于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;   //未超
}

 

Leave A Comment

Please be polite. We appreciate that. Your email address will not be published and required fields are marked