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!
    ?>
  • 相关阅读:
    CDH简易离线部署文档
    算法图解读书笔记
    html 知识整理
    Django admin 组件 原理分析与扩展使用 之 sites.py (一)
    阿里云 centos7 django + uWSGI+Nginx + python3 部署攻略
    git 命令和使用场景总结
    由select引发的思考
    Python 实现单例模式的一些思考
    pep 8 规范的一些记录
    python 垃圾回收机制的思考
  • 原文地址:https://www.cnblogs.com/cjjjj/p/9963145.html
Copyright © 2011-2022 走看看