一、前言

  公司要做呼叫中心,呼叫中心为了防止骚扰,需要限制用户拨打电话的频率,比如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!
?>

最新文章

  1. 协程--gevent模块(单线程高并发)
  2. Neutron 理解 (1): Neutron 所实现的虚拟化网络 [How Netruon Virtualizes Network]
  3. 关于ssh调用远程后台命令挂住的解释
  4. 第18章 图元文件_18.2 增强型图元文件(emf)(1)
  5. 实现textbox文本页面改变触发textchanged事件,代码里修改不触发
  6. ylbtech-Unitity-cs:计算阶乘值
  7. android MD5
  8. 使用DrawerLayout实现侧拉菜单
  9. NSString属性什么时候用copy,什么时候用strong?【转】
  10. Qt开发初步,循序渐进,preRequest for 蓝图逆袭
  11. 一个简单的servlet小程序
  12. cookie创建,删除
  13. strstr()与find()
  14. 内网ip/公网ip
  15. 为什么要用kafka、rabbit等消息队列
  16. Codeforces Round #548 (Div. 2) C dp or 排列组合
  17. Python中文语料批量预处理手记
  18. WOSA/XFS PTR FORM—基础知识
  19. Bitbox : a small open, DIY 32 bit VGA console
  20. UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character &#39;\xbb&#39; in position

热门文章

  1. ACM题目————STL + 全排列
  2. JAVA注解@Interface基础知识
  3. 如何写出安全的 API 接口?接口参数加密签名设计思路
  4. 20165310 预备作业3 Linux安装及学习
  5. Linux-进程间的通信-信号集函数【转】
  6. redhat7 防火墙设置
  7. 2018 Machine Learning
  8. 【Android实验】第一个Android程序与Activity生命周期
  9. HDU 6071 Lazy Running(很牛逼的最短路)
  10. UVa 11093 环形跑道(模拟)