前言
早就知道redis的消息队列很强大,但是没有使用场景,最近可能要做的东西需要这个做异步任务处理,刚好今天很早到公司了,顺便看看
首先,我服务器已经安装了redis,并且之前有使用过缓存,
所以直接就开始干了`
首先看看list的方法
- Blpop删除,并获得该列表中的第一元素,或阻塞,直到有一个可用
- Brpop删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用
- Brpoplpush
- Lindex获取一个元素,通过其索引列表
- Linsert在列表中的另一个元素之前或之后插入一个元素
- Llen获得队列(List)的长度
- Lpop从队列的左边出队一个元素
- Lpush从队列的左边入队一个或多个元素
- Lpushx当队列存在时,从队到左边入队一个元素
- Lrange从列表中获取指定返回的元素
- Lrem从列表中删除元素
- Lset设置队列里面一个元素的值
- Ltrim修剪到指定范围内的清单
- Rpop从队列的右边出队一个元素
- Rpoplpush删除列表中的最后一个元素,将其追加到另一个列表
- Rpush从队列的右边入队一个元素
- Rpushx从队列的右边入队一个元素,仅队列存在时有效
我们开始使用一下,先新建一个队列并且循环插入一些数据看看!
1 2 3 4 |
$arr = array('1','2','3','4','5','6','7','8','9','10'); foreach($arr as $k=>$v){ Redis::make()->_rPush('mylist',$v); } |
这里的使用的单利模式,封装了redis常用的几个接口!
然后把数据拿出来看看!
1 2 3 |
while ($list = Redis::make()-> _lPop('mylist')){ p($list); } |
全部拿出来了,很具队列的特性,我继续新添加一个进去,应该是在第一位!
1 |
Redis::make()-> _rPush('mylist','最后一个'); |
再看看队列的长度!
1 2 |
$a = Redis::make()->Hash()->lLen('mylist'); p('队列长度:'.$a); |
1 |
队列长度:20 |
1 |
最后一个 10 9 8 7 6 .... |
我页面刷新了两次,所以循环插入了两次,所以当前队列有20个数据!
简单封装的Redis方法!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
private static $_instance; public static function make(){ if(!self::$_instance){ self::$_instance = new self(); } return self::$_instance; } //调用不存在的静态方法跳转到此 public static function __callStatic($name, $arguments) { $_instance = self::getInstance(); return call_user_func_array([$_instance,$name],$arguments); } //快速设置 private function st($name,$value,$expire=null){ return $this->set($name,$value,$expire); } //快速获取 private function gt($name){ return $this->get($name); } //快速获取 public function get($name){ $this->_get('api_'.$name); } //快速设置 public function set($name,$value,$expire=null) { $this->_set('api_'.$name,$value,$expire); } public function _lPop($key){ return $this->handler->lPop($key); } public function _rPop($key){ return $this->handler->rPop($key); } public function _rPush($key,$value){ return $this->handler->lPush($key,$value); } public function Hash(){ return $this->handler; } |
$this->handler; 是实例化过的Redis对象!
记录结束,等待实现真正的异步消息队列吧!
自己探索,各位看客有更好的建议,欢迎留言告诉我,感激不尽…