Daily laravel-20160624| Ratelimiter

Source: Internet
Author: User

<?phpnamespace illuminate\cache;use illuminate\contracts\cache\repository as cache;//  declare namespaceclass 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}


This article is from the "Focus on PHP" blog, please be sure to keep this source http://lijinghsan.blog.51cto.com/3357095/1759061

Daily laravel-20160624| Ratelimiter

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.