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! ?>