Redisを使用してキュー操作を行う方法
3370 ワード
まず調味料をください.見てください.
Reidsは比較的高度なオープンソースkey-valueストレージシステムであり、ANSI Cを採用して実現されている.これはmemcachedと似ていますが、永続化されたデータストレージをサポートし、valueは文字列(memcachedのvalueと同じ)、リスト、集合(Set)、秩序化集合(OrderSet)、Hashなど、さまざまなタイプをサポートします.すべての値タイプは、リストにポップアップ要素を追加したり、コレクションに削除要素を挿入したりするなど、原子操作をサポートします.Rdidsのデータの大部分はメモリにあり、その読み書き効率は非常に高く、AOF(追加型操作記録ファイル)とDUMP(定期データバックアップ)の2つの永続化方式を提供する.RedisはカスタムVM(仮想メモリ)機構をサポートし、データ容量がメモリを超えると一部のValueをファイルに保存することができる.同時にRedisはMaster-Slave機構をサポートし、データ複製を行うことができる.
Redisのlist構造をキューとして使用することができる.
上のRedisのシーンと役割から言えば、私たちの現在の開発活動にとって、このような良いものを「Redisを使うために、Redis」の惨烈な局面に変えるのではなく、Redisをそれらのシーンに導入することができるのだろうか.もちろん、具体的な問題を具体的に分析することは本当に重要ですね.
キャッシュ?分散キャッシュ?
キュー?分散キュー?
一部のシステムアプリケーション(例えば、電信、銀行、大型インターネットアプリケーションなど)は使用されます.もちろん、現在盛んに行われているmemcacheは良い証明ですが、ある面から言えば、memcacheは2枚を網羅することができ、より良いことができますか.(実際に応用されていないので、投げ出すだけです).しかし、Redisから、Redisは、キューとキャッシュの2枚を網羅することができ、同時環境での悩みは生じないと感じることができます.Redisでの操作はすべて原子操作だったからです.
両者のどちらが良いか悪いかを評論するのは免れ、存在は理由であり、適切なものを選ぶのが一番だ.
次はRedisの中の行列(分布式)のデザインYYを游びましょう.エビたちによろしくお愿いします.
状況シーン:
現在のプロジェクトは,複数のサーバ,あるいは複数のIPに配備されており,フロントがF 5を介して配布されているため,ユーザの要求がどのサーバに落ちているのかは確定できない.プロジェクトでは、最初はこのような導入を考慮しておらず、最も扱いやすい方法でもあります.データベース・テーブルに直接ロー・レコードをロックします(Oracle).異なるアプリケーションの導入に対して、データベース・サーバが1台しかない場合、この同時発生の問題は「簡単」に解決されると言えます.したがって、アプリケーションに移行するかどうかを考慮して、データベース・サーバがビジネスにドープされないようにします.
たとえば、現在2台のアプリケーションサーバ、1台のデータベースサーバがあります.Redisをデータベースサーバに配備し,2台のサーバが同時キャッシュやキューを操作する際に,まずRedisサーバから,2台のアプリケーションサーバでエージェントオブジェクトを取得してから,列に列挙する操作を行うという考え方である.
コード実装を見る(PHP)
操作時には、同じリストオブジェクトを操作することに注意してください.
ほほほ、今の主な考え方は多くありませんが、実際のシーンでは、出入りがあります.
【転載先】http://hi.baidu.com/daqing15/item/b213dc7a64208f3c70442317
Reidsは比較的高度なオープンソースkey-valueストレージシステムであり、ANSI Cを採用して実現されている.これはmemcachedと似ていますが、永続化されたデータストレージをサポートし、valueは文字列(memcachedのvalueと同じ)、リスト、集合(Set)、秩序化集合(OrderSet)、Hashなど、さまざまなタイプをサポートします.すべての値タイプは、リストにポップアップ要素を追加したり、コレクションに削除要素を挿入したりするなど、原子操作をサポートします.Rdidsのデータの大部分はメモリにあり、その読み書き効率は非常に高く、AOF(追加型操作記録ファイル)とDUMP(定期データバックアップ)の2つの永続化方式を提供する.RedisはカスタムVM(仮想メモリ)機構をサポートし、データ容量がメモリを超えると一部のValueをファイルに保存することができる.同時にRedisはMaster-Slave機構をサポートし、データ複製を行うことができる.
Redisのlist構造をキューとして使用することができる.
上のRedisのシーンと役割から言えば、私たちの現在の開発活動にとって、このような良いものを「Redisを使うために、Redis」の惨烈な局面に変えるのではなく、Redisをそれらのシーンに導入することができるのだろうか.もちろん、具体的な問題を具体的に分析することは本当に重要ですね.
キャッシュ?分散キャッシュ?
キュー?分散キュー?
一部のシステムアプリケーション(例えば、電信、銀行、大型インターネットアプリケーションなど)は使用されます.もちろん、現在盛んに行われているmemcacheは良い証明ですが、ある面から言えば、memcacheは2枚を網羅することができ、より良いことができますか.(実際に応用されていないので、投げ出すだけです).しかし、Redisから、Redisは、キューとキャッシュの2枚を網羅することができ、同時環境での悩みは生じないと感じることができます.Redisでの操作はすべて原子操作だったからです.
両者のどちらが良いか悪いかを評論するのは免れ、存在は理由であり、適切なものを選ぶのが一番だ.
次はRedisの中の行列(分布式)のデザインYYを游びましょう.エビたちによろしくお愿いします.
状況シーン:
現在のプロジェクトは,複数のサーバ,あるいは複数のIPに配備されており,フロントがF 5を介して配布されているため,ユーザの要求がどのサーバに落ちているのかは確定できない.プロジェクトでは、最初はこのような導入を考慮しておらず、最も扱いやすい方法でもあります.データベース・テーブルに直接ロー・レコードをロックします(Oracle).異なるアプリケーションの導入に対して、データベース・サーバが1台しかない場合、この同時発生の問題は「簡単」に解決されると言えます.したがって、アプリケーションに移行するかどうかを考慮して、データベース・サーバがビジネスにドープされないようにします.
たとえば、現在2台のアプリケーションサーバ、1台のデータベースサーバがあります.Redisをデータベースサーバに配備し,2台のサーバが同時キャッシュやキューを操作する際に,まずRedisサーバから,2台のアプリケーションサーバでエージェントオブジェクトを取得してから,列に列挙する操作を行うという考え方である.
コード実装を見る(PHP)
list_push.php
<?php
$redis = getRedisInstance();// Redis redis
$redis->connect('Redis IP', 6379);
while (true) {
$redis->lPush('list1', 'A_'.date('Y-m-d H:i:s'));
sleep(rand()%3);
}
?>
# php list_push.php &
list_pop.php
<?php
$redis = getRedisInstance();// Redis redis
$redis->pconnect('Redis IP', 6379);
while(true) {
try {
var_export( $redis->blPop('list1', 10) );
} catch(Exception $e) {
//echo $e;
}
}
(Python)
1. (write.py)
#!/usr/bin/env python
import time
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', now)
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)
操作時には、同じリストオブジェクトを操作することに注意してください.
ほほほ、今の主な考え方は多くありませんが、実際のシーンでは、出入りがあります.
【転載先】http://hi.baidu.com/daqing15/item/b213dc7a64208f3c70442317