HTML5技术

用Redis实现分布式锁 与 实现任务队列 - __kelly_(3)

字号+ 作者:H5之家 来源:博客园 2015-11-23 08:33 我要评论( )

(3)这个队列和普通队列不一样,入队时的id是用来区分重复入队的,队列里面只会有一条记录,同一个id后入的覆盖前入的,而不是追加,如果需求要求重复入队当做不用的任务,请使用不同的id区分 先看 入队 的代码分

    (3)这个队列和普通队列不一样,入队时的id是用来区分重复入队的,队列里面只会有一条记录,同一个id后入的覆盖前入的,而不是追加, 如果需求要求重复入队当做不用的任务,请使用不同的id区分

    先看入队的代码分析:首先当然是对参数的合法性检测,接着就用到上面加锁机制的内容了,就是开始加锁,入队时我这里选择当前时间戳作为score,接着就是入队了,使用的是zset数据结构的add()方法,入队完成后,就对该任务解锁,即完成了一个入队的操作。

1 /** 2 * 入队一个 Task 3 * @param [type] $name 队列名称 4 * @param [type] $id 任务id(或者其数组) 5 * @param integer $timeout 入队超时时间(秒) 6 * @param integer $afterInterval [description] 7 * @return [type] [description] enqueue($name, $id, $timeout = 10, $afterInterval = 0) { (empty($name) || empty($id) || $timeout <= 0) return false; (!$this->_redis->lock->lock("Queue:{$name}", $timeout)) { 15 Logger::get('queue')->error("enqueue faild becouse of lock failure: name = $name, id = $id"); ; 17 } = microtime(true) + $afterInterval; (() { (false === $this->_redis->zset->getScore("Queue:$name", $item)) { 25 $this->_redis->zset->add("Queue:$name", $score, $item); 26 } 27 } ->_redis->lock->unlock("Queue:$name"); ; 33 34 }

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • HTML5 进阶系列:拖放 API 实现拖放排序 - _林鑫

    HTML5 进阶系列:拖放 API 实现拖放排序 - _林鑫

    2017-05-02 11:02

  • 调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加信息标注 - QISHUANG

    调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加

    2017-04-18 10:02

  • 计算机网络——DNS协议的学习与实现 - 学数学的程序猿

    计算机网络——DNS协议的学习与实现 - 学数学的程序猿

    2017-04-16 10:00

  • 前端实现搜索记录功能也就是天猫app历史记录存储方便浏览 - 今天的代码你撸了嘛

    前端实现搜索记录功能也就是天猫app历史记录存储方便浏览 - 今天的代

    2017-04-12 14:00

网友点评