一、前言
公司要做呼叫中心,呼叫中心為了防止騷擾,需要限制用戶撥打電話的頻率,比如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! ?>