Redisのキュー優先順位

 

通常、キュー操作にリストを使用し、そのように限定されるものではほとんどがあり、統一のタスクは、タスクの処理を優先したい場合によくない、FIFOです

 

プライオリティキューの概念を持っているこの必要性は、我々は、高レベルのタスクに優先順位を与えることができます

 

 

実装: 

 

(1)単一のリストを実装します

 

通常動作には、左、右アウトキュー(lpush、RPOP)であります

 

高レベルのタスクの面で優先度の高いタスクを処理するために直接ので、取得タスクからキューの先頭(右)、高い優先順位を取る場合、すなわち、キュー(RPUSH)の頭部に直接挿入されていることができますレベルのタスク(RPOP)

 

キュー構造の通常の作業と同等の、スタック構造に応じて、優先度の高いタスクが発生しました

 

利点は欠点は、高レベルのタスクは、最初のうちに常に最後ているで、簡単です

 

例簡単なキュー、あまり優先度の高いタスクの需要

 

 

(2)キューの実装 

 

異なるキューへのタスクのために2つのキュー、共通キュー、キュー上級レベルを使用します

 

非常に単純なタスクを取得し、注文に応じて複数のキューからBRPOP指令値のRedis

 

BRPOPの与えられた順序に従って、キーを見て、要素の最初の非空のリストは、ポップの尾で発見しました

 

繰り返し> BRPOPリスト1リスト2 0

 

優先度の高いタスクキューとしてリスト1

 

通常のジョブキューとしてLIST2

 

この実現のプロセスの優先度の高いタスク、何の優先度の高いタスクが存在しない場合には、一般的なタスクを取得するために行ってきました

 

 

(3)実現値を使用する権利 

 

優先順位は、優先順位のダース以上のように、より複雑である場合、以下の便利な方法2

 

例えば、重み値を有する三つのレベル(123)は、表現します

 

エンキューに必要な4つの要素があります。

 

レベル3、D 3レベルCレベル2、レベルB 1、

 

 

 

使用lpushはチームに入れ、重量を設定しました

 

Redisの> lpushマイリストA
のRedis>セット1 mylist_score_a


Redisの> lpushマイリストB
のRedis>セットmylist_score_b 2つ

のRedis> lpushマイリストC
Redisの>セットmylist_score_a 3

のRedis> lpushマイリストD
Redisの>セットmylist_score_a 3

 

 

重み値はソートされ、最初の要素が除去ランク付けされます 

 

mylist_score_によってRedisの>ソートマイリスト*制限0 1

 

cは、最高レベルのC、私たちが望む正確に何で、キューを入力する最初のものです:結果は

 

 

買収が完了した後、あなたは、この要素を削除したいです 

 

Redisの> lremマイリスト0 C

 

 

 

概要

 

1最も簡単な方法はなく、実用的なアプリケーションがより制限された方法3は、複雑な優先順位を有効にしますが、より実現するために複雑、メンテナンスに助長されていません

 

モード2は、推奨用法、最も適切なの実用化です

 

思考の1,3の方法は、Redisの拡張として適用することができます

 

おすすめ

転載: www.cnblogs.com/bugstars/p/12389205.html