ホームページ  >  記事  >  バックエンド開発  >  Redisキューの操作例(php)_PHPチュートリアル

Redisキューの操作例(php)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:19:10815ブラウズ

入力操作

コードをコピー コードは次のとおりです:

$redis = new Redis();
$redis->connect('127.0.0.1',6379);
while (True){
try{
$value = 'value_'.date('Y-m-d H:i:s')
$redis->LPUSH('key1',$value); )% 3);
echo $value."n";
}catch(Exception $e){
}
}
デキュー操作


コードをコピーします

コードは次のとおりです:
$redis = new Redis(); $redis->pconnect('127.0.0.1',6379); (True){
try{
echo $redis->LPOP('key1')."n";
}catch(Exception $e){
echo $e->getMessage()."n"; }
sleep( rand()%3);
}?>



キュー操作に Redis を使用する方法
Reids は、ANSI C で実装された比較的高度なオープンソースのキー値ストレージ システムです。これは memcached に似ていますが、永続的なデータ ストレージをサポートし、value は文字列 (memcached の値と同じ)、リスト、セット (Set)、順序付きセット (OrderSet)、およびハッシュの複数の型をサポートします。すべての値の型は、リストへの要素の追加とポップ、コレクションへの要素の挿入と削除などのアトミック操作をサポートしています。 Rdid のデータのほとんどはメモリ上に配置され、読み取りおよび書き込み効率が非常に高くなります。AOF (操作記録ファイルの追加) と DUMP (定期的なデータ バックアップ) の 2 つの永続化方法が提供されます。 Redis はカスタマイズされた VM (仮想メモリ) メカニズムをサポートしており、データ容量がメモリを超える場合、値の一部をファイルに保存できます。同時に、Redis はデータ レプリケーションを実行できるマスター/スレーブ メカニズムをサポートします。
Redisのリスト構造をキューとして利用できます
上記のRedisのシナリオと機能から、現在の開発活動において、「こんな良いものを進化させるのではなく、どのシナリオでRedisを導入できるでしょうか?」 Redis、「Redis」の悲惨な状況はどうですか?もちろん、特定の問題を詳細に分析することは非常に重要です。
キャッシング?分散キャッシュ?
キュー?分散キュー?もちろん、一部のシステム アプリケーション (電気通信、銀行、大規模なインターネット アプリケーションなど) はこれを使用します。しかし、ある面から見ると、memcache にはその 2 つが含まれるのでしょうか。もっとうまくできるはずです(実際には応用できないので、ただ捨てるだけです)。しかし、Redis を見ると、Redis ではキューとキャッシュの両方を含めることができ、Redis の操作はすべてアトミックな操作であるため、同時実行環境でも問題が発生しないことがわかります。
どちらが良いか悪いかについてコメントする必要はありません、存在が理由であり、自分に合ったものを選択するのが最善です。 Redis でキュー (分散) デザイン YY を試してみましょう。アドバイスをお願いします。 状況シナリオ:
現在、プロジェクトは複数のサーバーまたは複数の IP にデプロイされており、フロントエンドは F5 を通じて分散されているため、ユーザーのリクエストがどのサーバーに該当するかを判断することは不可能です。このプロジェクトでは、この種の展開は当初は考慮されていませんでしたが、同時に、(Oracle 上で) データベース テーブルの行レコードを直接ロックすることが最も簡単な方法でもありました。 。さまざまなアプリケーションをデプロイし、データベース サーバーが 1 つだけの場合、この同時実行の問題は「簡単に」解決できると言えます。そこで、データベース サーバーが業務に関与しないように、アプリケーションに移行するかどうかを検討します。
たとえば、現在 2 つのアプリケーション サーバーと 1 つのデータベース サーバーがあります。このアイデアは、データベース サーバーに Redis をデプロイすることです。2 つのサーバーが同時にキャッシュまたはキューを操作する場合、最初に 2 つのアプリケーション サーバー上のプロキシ オブジェクトを Redis サーバーから取得し、次に列をリストする操作を実行します。
コード実装を見てください (PHP)
キュー操作ファイル list_push.php



コードをコピー

コードは次のとおりです:


$redis = getRedisInstance();// Redis を取得しますRedis サーバーからのインスタンス
$redis->connect('Redis サーバー IP', 6379); while (true) { $redis->lPush('list1', 'A_'.date('Y-m-d H: i:s') ; $redis = getRedisInstance();//Redis サーバーから Redis インスタンスを取得します $redis->pconnect('Redis サーバー IP', 6379); { try {
var_export( $redis->blPop('list1', 10) );
} catch(Exception $e) {
//echo $e
}


実装方法(Python)
1. キュー(write.py)
コードをコピー コードは以下の通りです:

#!/usr/bin/env python
インポート時間
from redis import Redis
redis = Redis(host='127.0.0.1', port=6379)
while True:
now = time.strftime("%Y/%m/%d %H:%M:%S")
redis.lpush (「test_queue」、今)
time.sleep(1)

2. デキュー (read.py)
コードをコピー コードは次のとおりです:

#!/usr/bin/env Python
import sys
from redis import Redis
redis = Redis(host='127.0.0.1', port=6379)
while True:
res = redis.rpop('test_queue')
if res == None:
pass
else:
print str(res)

操作する際は、同じリストオブジェクトを操作していることに注意してください。
はは、現在の主なアイデアはほぼ次のとおりですが、実際のシーンでは違いがあるでしょう。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325356.html技術記事キュー操作をコピーするコードは次のとおりです。 ?php $redis = new Redis() $redis-connect('127.0.0.1',6379); try{ $value = 'value_'.date ('Y-m-d H:i:s'); $redis-LPUSH('key1',$v...
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。