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!
    ?>
  • 相关阅读:
    查看mysql数据库容量大小
    通过shell监控网页是否正常,然后促发邮件告警
    Linux shell标准输入,标准输出,错误输出
    linux资源管理命令之-----vmstat
    linux基础命令--lsof
    squid之------ACL控制
    JDK的二进制安装
    重置grafana密码
    CentOS 7添加开机启动服务脚本
    LVM逻辑卷理论及配置
  • 原文地址:https://www.cnblogs.com/cjjjj/p/9963145.html
Copyright © 2011-2022 走看看