zoukankan      html  css  js  c++  java
  • php实现频率限制

    一、前言

      公司要做呼叫中心,呼叫中心为了防止骚扰,需要限制用户拨打电话的频率,比如30s只能点击一次。这样的需求是通过redis来实现的。

    二、具体实现

    <?php
    
    class ResourceLock
    {
        private $lock_key = 'cxxxx:%s';
    
        private static $redis_instance;
    
    
        public function __construct()
        {
            self::$redis_instance = Redis::connection('lock');
        }
    
        private function getKey($resource_unique_name)
        {
            return str_replace('%s', $resource_unique_name, $this->lock_key);
        }
    
        /**
         * 检查资源锁
         * @param  string $resource_unique_name
         * @param int $lock_second 秒
         * @return array|bool
         */
        public function checkLock($resource_unique_name)
        {
            $lock_key = $this->getKey($resource_unique_name);
            $locked = self::$redis_instance->get($lock_key);
            if ($locked) {
                return false;
            }
            return true;
        }
    
        /**
         * 检查资源锁
         * @param  string $resource_unique_name
         * @param int $lock_second 秒
         * @return array|bool
         */
        public function setLock($resource_unique_name, $lock_second = 300)
        {
            $lock_key = $this->getKey($resource_unique_name);
            // 数据加锁
            self::$redis_instance->setex($lock_key, $lock_second, "1");
        }
    
        /**
         * 释放锁资源
         * @pastring $lock
         * @return bool
         */
        public function unlock($resource_unique_name)
        {
            $lockKey = $this->getKey($resource_unique_name);
            return self::$redis_instance->del($lockKey);
        }
    }

    三、redis的方法

    $redis->expire($key, 60); //保持跟自然间隔时间相同 会自动延时60秒


     

    四、收获

    <?php
    echo str_replace("world","Shanghai","Hello world!");

    Hello Shanghai!
    ?>
  • 相关阅读:
    集合的代数运算
    集合的代数运算
    poj1639 Picnic Planning,K度限制生成树
    C/C++学习站点资源
    Mustache 使用心得总结
    PostgreSQL服务端监听设置及client连接方法
    【线性规划与网络流24题】汽车加油行驶问题 分层图
    linux系统下信号具体解释2
    【数据结构】栈-数组的实现
    EJB究竟是什么,真的那么神奇吗??
  • 原文地址:https://www.cnblogs.com/cjjjj/p/9963145.html
Copyright © 2011-2022 走看看