predis限流器

INCR

首先介绍predis中的incr,incrBy命令
用法:

$redis->incr(‘key’)
key中的值自增加1,如果key不存在,那么key先被初始化位0,然后自增。如果值包含不正确的类型那么返回一个错误。
如果添加第二个参数,那么请使用incrBy,$redis->incrBy(‘key’, increment),将在key的基础上增加increment。

限速器

限速器是一个特殊化的计算器,它用于一个操作可以被执行的速率(rate)。

限速器的经典用法是限制公开的API的请求次数,以下是一个限速器时间实例,它将API的最大请求限制在每个IP地址每秒钟十个之内。

<?php
    $ip = get_api_ip();//获取用户ip函数 
    $key = 'SECOND_REQUERY_NUM:'.$ip;
    $requery_num = $redis->lLen($key);
    if ($requery_num > 10) {
      die('Too many requey second');
    }
    if(!$redis->existes($key)) {
      $redis->rPush($key, $ip);
      $redis->expire($key, 1);
    }
    $redis->rPushx($key, $ip);
    echo 'ok';
?>

限速器使用列表结构作为容器,$redis->lLen()检查列表中记录的访问次数,第二个if语句用于第一次访问时,执行计数和创建列表,并且设置过期时间,最后的$redis->rPushx在后续的计数中进行增加操作。

下一篇:HTTP协议