メッセージキューの秒殺によるredis高同時タイミングタスクの実現
2757 ワード
メッセージキュー
コンセプト
(プロセスミドルウェア、2つ以上のシステムシーンが優位)キュー構造のミドルウェア メッセージを入れると、 を直ちに処理する必要はない.は、購読者/消費者によって順次処理する .
げんり
ビジネスシステム(エンキュー)->メッセージキュー->キュー処理システム
シーンデータ冗長(永続化キューに格納オーダープログラムによる処理記憶各記録処理完了) .システム受注システムと配送システムのデカップリング
1つのファイルは、ユーザの注文情報を受け取り、キューに書き込むためのファイル(order.php)1である.ユーザから送信データをフィルタリングする(mysql注入防止).生成された注文情報はキュー表3に格納.キューリストにデータを格納する主に配送システムがキュー内の注文を処理してマークするファイル(goods.php) 処理するレコードを、処理待ち に更新する.更新したばかりのデータを選択し、配送システムの処理 を行います.これらの処理が完了したプログラムを、 流量削峰listタイプ秒殺 を実現
user.php
save.php
非同期通信 並べ替え保証 拡張性 キューのメリットとデメリット
キューメディア mysql:信頼性が高く、実現を意図し、速度が遅い redis:速度が速く、単一の大きなメッセージパケットの効率が低い メッセージシステム:専門性が強く、信頼性が高く、学習コストが高い メッセージ処理トリガメカニズムデッドサイクル方式読み取り:実現しやすく、故障時に に直ちに回復できない定死任務:圧力は均一で、処理量の上限がある デーモンプロセス:php-fpmおよびphp-cgと同様にshellベース が必要です.
lpush/lpushx存在するリストヘッダに値を挿入
RabbitMQより専門的なメッセージシステム実装スキーム(複雑な論理プロジェクト)
コンセプト
(プロセスミドルウェア、2つ以上のシステムシーンが優位)
げんり
ビジネスシステム(エンキュー)->メッセージキュー->キュー処理システム
シーン
mysql
id(11) order_id(11),mobile(vch20),created_at(datetime),status(tinyint(2))
1つのファイルは、ユーザの注文情報を受け取り、キューに書き込むためのファイル(order.php)1である.ユーザから送信データをフィルタリングする(mysql注入防止).生成された注文情報はキュー表3に格納.キューリストにデータを格納する主に配送システムがキュー内の注文を処理してマークするファイル(goods.php)
$waiting = array('status'=>0)
$lock =array('status'=>2)
$res =update('duilie',$lock,$waiting);
if($res){
//
$res=$db->selectAll('duilei',$lock);
//
.......
}
$arr =array(
'status'=>1,
'updated_at'=>date('y-m-d h:i:s',time());
)
タイミングスクリプト(goods.sh)crontab-eコマンドが毎分1回実行する#m h dom mon dow command分時日月週実行のコマンド*/1****/home/sites/goodsに更新する.sh >>/home/log.log 2>&1結果をログファイルに出力標準出力tail-f logを変換する.logモニタログファイル#!/bin/bash
date"+%G-%m-%d %H:%M:S"
cd goods.sh (/home/sites/)
php goods.php
id(int10),uid(int11),time_stamp(vach24)
user.php
redis
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis_name="miaosha";
for($i=0;$i<100;$i++){
$uid = rand(100000,999999);
}
uid
$uid =$_GET['uid'];
redis
$num =10;
10,
if($redis->lLen($redis_name) <10)
{
$redis->rPush($redis_name,$uid.'%'.microtime());
}else
{
10 ,
echo ' ';
}
$redis->clsoe();
save.php
while(1)
{
//
$user =$redis->lPop($redis_name);
//
if(!$user || $user =='nil')
{
sleep(2);
continue;
}
}
,uid
$user_arr = explode('%',$user);
$insert_data = array(
)
redis
キューメディア
lpush/lpushx存在するリストヘッダに値を挿入
RabbitMQより専門的なメッセージシステム実装スキーム(複雑な論理プロジェクト)