这篇文章简单的讲解并实现Redis消息队列的入列和出列。
1、入列,我们把入列比作是生产厂家,厂家只管尽情的成产即可,你不需要考虑其他(除特殊场景秒杀、抢购场景等)。
//入列,生产厂家 public function into(){ $redis = new Redis(); //业务场景不在此过多阐述 for ( $i = 1 ; $i <= 10 ; $i++ ){ $user = array('id'=>$i,'username'=>'user'.$i); $redis->lPush('data',json_encode($user)); } }
2、查看队列中的所有数据
//查看队列所有数据 public function data(){ $redis = new Redis(); dump($redis->lRange('data',0,-1)); }
结果如下:
array(10) { [0] => string(34) "{"id":10,"username":"user10"}" [1] => string(32) "{"id":9,"username":"user9"}" [2] => string(32) "{"id":8,"username":"user8"}" [3] => string(32) "{"id":7,"username":"user7"}" [4] => string(32) "{"id":6,"username":"user6"}" [5] => string(32) "{"id":5,"username":"user5"}" [6] => string(32) "{"id":4,"username":"user4"}" [7] => string(32) "{"id":3,"username":"user3"}" [8] => string(32) "{"id":2,"username":"user2"}" [9] => string(32) "{"id":1,"username":"user1"}" }
3、出列,我们可以将出列看作为消费者,同样,尽管尽情的消费即可,只要队列有数据就进行消费,勤勤恳恳的工作。不用考虑什么时候有数据不用考虑多少数据,只要有数据就干掉他。
//消费者 public function out(){ $redis = new Redis(); //获取队列长度 $count = $redis->handler()->llen('data'); for ( $i=0; $i < $count; $i++){ //拿出队列中第一个json信息 $user = $redis->lIndex('data',0); //解析成数组 $user_info = json_decode($user,true); //此处进行业务处理。 echo "<br /> ".$user_info['username']."出队列成功 <br />"; //处理成功,将此信息移除队列。 $redis->lPop('data'); } }
结果如下:
demo10出队列成功 demo9出队列成功 demo8出队列成功 demo7出队列成功 demo6出队列成功 demo5出队列成功 demo4出队列成功 demo3出队列成功 demo2出队列成功 demo1出队列成功