Redisのは何ですか?
Redisのは、非常に高速なオープンソースの非リレーショナル、キー値データベース、一般にサーバと呼ばれるデータ構造であり、それは、マッピングの5種類のキー値を格納します。データベース、キャッシュおよびメッセージブローカーとして。
RedisのRedisのデータベース、およびその他の重要なデータストレージおよび動作する能力の高度なタイプとの主な違いの一つ。これらのデータ型は、ほとんどの開発者は、基本的なデータ構造に精通している(リスト、マップ、セットとセットのソート)です。優れた性能のRedisの、操作のシンプルさと、原子データ構造のヘルプ問題を解決するには、従来のリレーショナルデータベースを使用して実現するか、パフォーマンスが低下することは困難です。
Redisの機能
確かに、製品の特性に必要な製品の使用シナリオ、Redisのが特徴何最初のリスト:
- グッド読み取りおよび書き込みパフォーマンス
- 持久化
- 豊富なデータタイプ
- シングルスレッド
- データが自動的に有効期限が切れています
- パブリッシュおよびサブスクライブ
- 分散
ここではいくつかのシナリオ、Redisの下に言ったアプリケーションの異なる寸法です。
一般的なシナリオ
1、キャッシュ
Redisのキャッシュはとても優れたRedisの読み取りおよび書き込みパフォーマンス主な理由で、それをすべて使用し、最も一般的なシナリオです。そして、そこで成長している優先サーバー・サイド・キャッシング・コンポーネントとして、memcachedを交換してください。また、Redisの内部の業務を効果的にデータの一貫性を確保することができる時間の使用に支持されています。
しかし、注意事項があります。
- キーが異なるオブジェクトで再利用することができないことを保証しなければならない、とキーを短くするために、クラス名スプライシングを使用して、プライマリキー。
- 道の順序付けられたシーケンスを選択し、重要な目的は、効率を改善し、シリアル化のメモリフットプリントを削減することでもあります。
- データキャッシュコヒーレンシの間に。2つの一般的なアプローチがあります。
- 専用キャッシュ・オブジェクトデータベースに照会した後、除去または変更操作の目的は、直接対応するキャッシュの削除(または設定が期限切れにする)場合
- 新規およびオブジェクト・キャッシュの後にデータベースクエリに配置されたが、キャッシュは、変更、削除クリア対応するキャッシュ、または有効期限が切れるように設定した後に更新されます。
2、ビジネスの使用を制限
Redisのコマンドは、キーの有効期間を設定するために使用することができます有効期限が切れ、Redisの後の時間は、それを削除します。この機能を使用すると、期間限定プロモーション情報、電話確認コードやその他のビジネスシナリオで使用することができます。
3、カウンタ
カウント機能が最適Redisの利用シナリオのいずれかであるべきで、リーダ高周波数特性は、効率的なインメモリデータベースとしてのRedisを再生することができます。Redisの、文字列、ハッシュ、およびソートセットINCRのデータ構造でそれぞれのシナリオを以下に示すアトミックインクリメント動作のための方法を提供します。
- アプリケーションは、一日あたりの登録ユーザー数を表示する必要がある場合は、それを使用することができます
String
カウンタとして、名前の設定REGISTERED_COUNT_TODAY
キーを、初期化時に夜12時にそれを設定した有効期限を与え、毎回使用して登録が成功した後、ユーザーincr
作成するコマンドを主要な成長1、キーの値がクリアされているため、夜12時後に毎日、このカウンタが期限切れになりながら。 - 各マイクロブログビットコメントの数のようなものであり、転送およびビューの4つのプロパティ、多くの
hash
カウントが良くなる、キーカウンタがセットされweibo:weibo_id
、hash
フィールドのlike_number
、comment_number
、forward_number
およびview_number
、対応する操作後によりhincrby
そのようにhash 中
フィールドの増分。 - アプリケーションは、機能のリストを掲載している場合は、選択し
sorted set
、コレクションのキーを、それをPOST_RANK
。使用している場合、ユーザーのポスト、zincrby
ユーザーIDのスコアが1増加しました。sorted set
再ソートユーザの位置のリストには、リアルタイムの更新を取得しますします。
4、リーダーボード
使用したSortedSetが簡単に発熱チャートを作成することができ、zrevrangebyscoreは、逆の順序でスコアのシーケンスを取得することができますzrankは、チャート内のメンバーの役割を取得することができます。
5、分散ロック
Redis2.6.12のバージョンでは、string
setコマンドには、3つのパラメータを追加しました:
-
Ex
:A設定キーの有効期限の時間(s) -
Px
:キーの有効期限を設定する(ミリ秒) -
NX
|XX
:セットNX
、キーは、それが操作された場合にのみ存在するキーが存在しない場合にのみ、XXに設定されているが操作され、この操作がアトミックであり、分散ロックは、単に、例えば、実現することができます。set key "lock" Ex 1 xx
操作は、それが現在のロックに占領されたことを失敗したの虚偽の、キーの説明が追加返し、それがtrueを返した場合、説明はロックされている、によってそれが操作の後に動作し続けることができれば
del
ロックが解除されて、さらにいくつかの理由であれば何のプログラムがありませんロックが自動的に1秒にリリースされますので、有効期限を設定し、ロックを解除します。 -
擬似コード:
//产生锁 while lock!=1 //过期时间是为了避免死锁 now = int(time.time()) lock_timeout = now + LOCK_TIMEOUT + 1 lock = redis_client.setnx(lock_key, lock_timeout) //真正要处理的业务 doing() //释放锁 now = int(time.time()) if now < lock_timeout: redis_client.delete(lock_key)
図6に示すように、動作の遅延
我々は、ユーザーをテストするために、インベントリ・ツー・オーダー、10分を取るとき例えば、購入して本当に十分です在庫を削減しながら、ドキュメントセットは、無効である場合、購入していません。2.8.0バージョンは、顧客が何らかの方法でイベント影響を受けるために、パブ/サブチャネル、Redisのデータセットをサブスクライブすることを可能にする鍵空間通知機能を提供して以来のRedis以来。次のソリューションを使用することができ、上記のニーズに合わせて私たちは、私たちは、順番にあるキーを設定し、セット10分には、フォローアップの鍵故障を聞いて、私たちはキーの有効性を監視し、バックグラウンドでリスナーを実装し、有効期限が切れプラスロジック。もちろん、我々はまた、ActiveMQのような要件を満たすためのミドルウェア遅延キューサービスをメッセージングなど、RabbitMQのを使用することができます。
7、ページング、あいまい検索
zrangebylex方法でRedisのコレクションセットには、次の構文を提供します。
ZRANGEBYLEXキー最小最大[LIMITオフセットのカウント]
ここで、データ照会+ LIMIT 0 10を照合することができます - - すべてのデータを取得することにより、ZRANGEBYLEX ZSET +を表し、
データディクショナリの間隔を返すことができzrangebylexキー分maxは、この機能を使用すると、私は、これは現在、Redisの中に一つだけがストアコンテンツあいまいクエリの機能をサポートしていることがわかった、あいまいクエリ機能することができます。
8、親指アップ、バディ関係など
Redisのマイクロブログを指すRedisのアプリケーションを、マイクロブログ導入PPTは、主に、カウントと友情の両方で使用されています
使用のRedisの冒頭で「Redisの設計と実装は、」set
従来のデータベースは、セットの共通部分を計算することができないためです。
ユーザAのために、ファンは、二つのセットに格納されているユーザIDにその焦点になります。
-
A:follow
:Aは、すべてのユーザーIDの注意を保存します -
A:follower
:ユーザID Aにすべてのファンを保存しますそれまでに
sinter
それが命令することができるA:follow
とA:follower
Aが互いの交差点に興味があるユーザーを取得します。ときAが別のユーザBの家に入り、A:follow
そしてB:follow
交差点はAとBの共通の焦点である、A:follow
とB:follower
人物Aの交差点も懸念B.心配されます
9、キュー
Redisのlist
二重リンクリストのデータ構造が実現され、それは、メッセージキュー(プロデューサ/コンシューマモデル)に非常に容易にすることができます。メッセージプロデューサは、メッセージが消費者のRPOPによって除去することができ、メッセージlpushリストを配置する必要があり、かつ秩序のメッセージを確認してください。
必要に応じて優先度を持つメッセージ・キューは、**を選択することができますsorted list
。そして、pub/sub
**メッセージのパブリッシャ/サブスクライバモデルとして使用することができます。永続化機能付きのRedisので、メッセージの損失にサーバ障害のリードを気にせずに発生します。
10、タイムライン
二重リンクリストとしてリスト、それはスタックとして使用されている場合、キューとして使用することができないだけでは、共通のタイムラインになることができます。ユーザーが終了すると、それに行われた場合には、lpushを通してそれをキーLATEST_WEIBOリストに保存されています。それはLRANGEによって、最新のマイクロブログの後に除去することができます。
11、転置インデックス
逆索引は、Redisのは、セットによって確立されたインデックスを反転させることができる構造検索機能への最も一般的な方法で、ここでは簡単な例表音検索プレフィックス+都市機能です。
街を仮定北京
します辞書をスペル北京
回しbeijing
ていると、これら2つの単語による接頭語は、番号のプレフィックスインデックスに分かれています北
、北京
、b
、be
... beijin
とbeijing
。これらのインデックスとして使用したset
(例:鍵index:北
)と記憶北京
IDを、転置インデックスはよくとして確立されます。次に、検索にのみ対応するキーワードを削除しset
、かつIDを得ることができます。
例:スパイクとの結合とRedisの
スパイクは、インターネットマーケティングモデル系で、今一般的な非技術者がリソース調整で、常にいくつかのバイアスを導いた技術的な問題を理解することができないため、開発者として、実際には、ほとんどは、このようなイベントを望んでいません。実際には、スパイクの問題がしばしば発生し、次のとおりです。
- 同時はあまりにも高いブロッキングにプログラムを引き起こして。
- 在庫を効果的に制御することができない、状況が売られ過ぎ表示されます。
実際には、基本的に2つのオプションがこれらの問題を解決します:
- データをキャッシュするために試してみてください、との直接ユーザーとの対話データベースを遮断します。
- ロック回避の売られ過ぎを制御することによって。
今、私たちはスパイクを行った場合、その後、Redisのは、使用をどのように組み合わせるかでなければならないことを説明?
- ウォームアップ先のデータ、Redisのを追加
- Redisの一覧へ商品一覧
- 詳細商品データRedisのハッシュは、有効期限を設定し、保存します
- インベントリデータRedisのは、貯蔵品のセットをソート
- セットユーザアドレス情報保持をRedisの
- 分散ロックのRedisによって生成されたバックル・在庫発注、在庫同期控除
- 注文の出荷データを生成した後、メッセージキューの処理によって、Redisのリストを生成します
- スパイクの後、その後のデータやデータベースのRedisを同期
上記の簡単なスパイク・システムやプログラムのRedisの組み合わせは、もちろん、実際のHTTPキャッシュを導入すること、またはその代わりに他のプログラムのMQメッセージとのドッキング、ビジネスケースも欠けて表示されている、これは単に議論を開始することを望んでいます。