ratelimiter php,每天laravel-20160624|RateLimiter

namespace Illuminate\Cache;

use Illuminate\Contracts\Cache\Repository as Cache;

// declare namespace

class RateLimiter

{// RateLimiter

/**

* The cache store implementation.

*

* @var \Illuminate\Contracts\Cache\Repository

*/

protected $cache;// a interface instance

/**

* Create a new rate limiter instance.

*

* @param  \Illuminate\Contracts\Cache\Repository  $cache

* @return void

*/

public function __construct(Cache $cache)

{

$this->cache = $cache;

}// a big set to init a class, instance about cache.

/**

* Determine if the given key has been "accessed" too many times.

* Determine whether to add many times

* @param  string  $key

* @param  int  $maxAttempts

* @param  int  $decayMinutes

* @return bool

*/

public function tooManyAttempts($key, $maxAttempts, $decayMinutes = 1)// increment too Many Attempts

{

if ($this->cache->has($key.':lockout')) {

return true;

}// check lockout,

if ($this->attempts($key) > $maxAttempts) {

$this->cache->add($key.':lockout', time() + ($decayMinutes * 60), $decayMinutes);

return true;

}// to change the access weight

return false;

}// done is to back true, or back false

/**

* Increment the counter for a given key for a given decay time.

*

* @param  string  $key

* @param  int  $decayMinutes

* @return int

*/

public function hit($key, $decayMinutes = 1)

{

$this->cache->add($key, 1, $decayMinutes);

return (int) $this->cache->increment($key);

}// to add a increment time, increment

// this is hit function to change time

/**

* Get the number of attempts for the given key.

*

* @param  string  $key

* @return mixed

*/

public function attempts($key)

{

return $this->cache->get($key, 0);

}// get value by key

/**

* Get the number of retries left for the given key.

*

* @param  string  $key

* @param  int  $maxAttempts

* @return int

*/

public function retriesLeft($key, $maxAttempts)

{

$attempts = $this->attempts($key);// try to get value

return $attempts === 0 ? $maxAttempts : $maxAttempts - $attempts + 1;

}// a retirsleft ,a left times

/**

* Clear the hits and lockout for the given key.

*

* @param  string  $key

* @return void

*/

public function clear($key)

{

$this->cache->forget($key);

$this->cache->forget($key.':lockout');

}// clear the hit and forget key and forget an shadow key,that is $key.:lockout

/**

* Get the number of seconds until the "key" is accessible again.

*

* @param  string  $key

* @return int

*/

public function availableIn($key)

{

return $this->cache->get($key.':lockout') - time();

}// has the time back, get the can be used times

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值