ホームページ  >  記事  >  バックエンド開発  >  Redis を使用してキュー操作を実行する方法 Redis 操作サンプルコードの概要

Redis を使用してキュー操作を実行する方法 Redis 操作サンプルコードの概要

伊谢尔伦
伊谢尔伦オリジナル
2017-07-17 09:33:081397ブラウズ

キュー操作に Redis を使用する方法

Reids は、ANSI C で実装された、比較的高度なオープンソースのキーと値のストレージ システムです。これは memcached に似ていますが、永続的なデータ ストレージをサポートし、値は複数のタイプをサポートします: string (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をエンキューします

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

<?php 
$redis = getRedisInstance();//从Redis服务器拿到redis实例 
$redis->connect(&#39;Redis服务器IP&#39;, 6379); 
while (true) { 
$redis->lPush(&#39;list1&#39;, &#39;A_&#39;.date(&#39;Y-m-d H:i:s&#39;)); 
sleep(rand()%3); 
} 
?>

#php list_push.phpを実行&

キューオペレーションlist_pop.phpファイルを出力します

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

<?php 
$redis = getRedisInstance();//从Redis服务器拿到redis实例 
$redis->pconnect(&#39;Redis服务器IP&#39;, 6379); 
while(true) { 
try { 
var_export( $redis->blPop(&#39;list1&#39;, 10) ); 
} catch(Exception $e) { 
//echo $e; 
} 
}

実装方法(Python)

1.キューに入る(write.py)

コードは以下の通り:

#!/usr/bin/env python 
import time 
from redis import Redis 
redis = Redis(host=&#39;127.0.0.1&#39;, port=6379) 
while True: 
now = time.
strftime("%Y/%m/%d %H:%M:%S") 
redis.lpush(&#39;test_queue&#39;, now) 
time.sleep(1)

2.デキュー(read.py)


コードは以下の通り:

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


サンプルコード:

1. チームに参加します

<?php
$redis = new Redis();
$redis->connect(&#39;127.0.0.1&#39;,6379);
while(True){
  try{
    $value = &#39;value_&#39;.date(&#39;Y-m-d H:i:s&#39;);
    $redis->LPUSH(&#39;key1&#39;,$value);
    sleep(rand()%3);
    echo $value."\n";
  }catch(Exception $e){
    echo $e->getMessage()."\n";
  }
}
?>

2. チームを切り離します

<?php
$redis = new Redis();
$redis->pconnect(&#39;127.0.0.1&#39;,6379);
while(True){
  try{
    echo $redis->LPOP(&#39;key1&#39;)."\n";
  }catch(Exception $e){
  echo $e->getMessage()."\n";
  }
  sleep(rand()%3);
}
?>

以上がRedis を使用してキュー操作を実行する方法 Redis 操作サンプルコードの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。