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出隊列成功
demo6出隊列成功
demo5出隊列成功
demo4出隊列成功
demo3出隊列成功
demo2出隊列成功
demo1出隊列成功
轉載:https://blog.csdn.net/qq_35679620/article/details/103306139
---------------------------------------------------------------
$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'); }