php Redisメッセージキューに基づいて実行されるメッセージの送信方法
基本的な知識点
ポイントは以下の命令を使って、私達のメッセージを実現して送ります。 bpopブロッキングモードは、キューの右から値を取得した後、 を削除する。 bpopushは、キューAの右から値を取った後に削除され、左からキューBに配置された 論理分析普通のジョブスクリプトにプッシュプッシュプッシュを書き込みます。queueキューはメッセージのターゲットを送信し、目標のためにプッシュするコンテンツを設定し、いつまでも有効期限が切れません。 RedisPush Queにおけるbpopush処理は、処理後の値をtemp_に置く。queue、主にプログラムの崩壊によるプッシュ失敗を防止します。 Redis AutoDeleted TempqueueItems処理temp_queue、bpop を使用しました。
コードの実装
通常のタスクスクリプト
ポイントは以下の命令を使って、私達のメッセージを実現して送ります。
コードの実装
通常のタスクスクリプト
<?php
foreach ($user_list as $item) {
// _ _ID_ 6 " "
$k_name = 'rabbit_push_' . $item['uid'].'_'.rand(100000,999999);
$redis->lPush('push_queue',$k_name);//
$redis->set($k_name, ' ');
}
RedisPusshQue
<?php
// ~
//
//
// nohup php YOURPATH/RedisPushQueue.php & ,
// blpop ,
// ~
// BRPOPLPUSH
//
ini_set('default_socket_timeout', -1); //
require_once 'YOURPARH/Rongcloud.php';
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(2);// db2
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
// temp_queue 0 !
While ($key = $redis->brpoplpush('push_queue', 'temp_queue', 0)) {
if ($val = $redis->get($key)) {
//rabbit_push_20_175990
$arr = explode('_', $key);
if (count($arr) != 4) {
continue;
}
$id = $arr[2];
push($id, $val);
// key
$redis->del($key);
}
}
function push($id, $v)
{
// ~
}
Redis AutoDeletems
<?php
/* temp_queue , RedisPushQueue
brpop temp_queue , " " " ", RedisPushQueue
lpush push_queue ,
brpop , RedisPushQueue brpoplpush
nohup php YOURPATH/RedisAutoDeleteTempqueueItems.php & ,
*/
ini_set('default_socket_timeout', -1); //
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(2);// db2
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
while($key_arr = $redis->brPop('temp_queue',0)){
if(count($key_arr) != 2){
continue;
}
$key =$key_arr[1];
if($redis->get($key)){// RedisPushQueue
$redis->lPush('push_queue',$key);
}
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。