thinkphp实现redis简单的消息队列
thinkphp 实现redis简单的消息队列
本章简单的实现。消息队列的⼊列和出列
1.⼊列,⼊列作为⽣产者,只管尽情的成产即可,⽆需考虑其他(秒杀、抢购场景除外)。
此次我们假如有⼗个⽤户进⼊队列。
//⼊列,⽣产者
public function into()
{
$redis  = new Redis();
//业务场景不在此阐述
for ( $i = 1 ; $i <= 10 ; $i++ ){
$user = array('user_id'=>$i,'username'=>'demo'.$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) "{"user_id":10,"username":"demo10"}"
[1] => string(32) "{"user_id":9,"username":"demo9"}"
[2] => string(32) "{"user_id":8,"username":"demo8"}"
[3] => string(32) "{"user_id":7,"username":"demo7"}"
[4] => string(32) "{"user_id":6,"username":"demo6"}"
[5] => string(32) "{"user_id":5,"username":"demo5"}"
[6] => string(32) "{"user_id":4,"username":"demo4"}"
[7] => string(32) "{"user_id":3,"username":"demo3"}"
[8] => string(32) "{"user_id":2,"username":"demo2"}"
[9] => string(32) "{"user_id":1,"username":"demo1"}"
}
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出队列成功
php简单秒杀实例代码demo6出队列成功
demo5出队列成功
demo4出队列成功
demo3出队列成功
demo2出队列成功
demo1出队列成功
---------------------------------------------------------------
$redis = new \Redis();
$redis->connect("1xx.2xx.1xx.2xx3",'6379');
$redis->auth('xxx');
$redis->select(1);
$count  = $redis->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');
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。