2017-05-02 2 views
0

redisを使用して以下のデータを管理する必要があります。Redis server値の範囲でパスの値を直接チェックする方法

Strat_range|End_range|circle|operator|operator_id|circle_id 

918005000000|918005099999|UP EAST|BSNL|4|22 
919967200000|919967299999|MAHARASHTRA|AIRTEL|15|20 

私はオペレータ検出のために1つのAPIを持っています。私は携帯電話番号&番号&の上のチェック番号を介して渡されていますどのシリーズで一致する設定&戻ります。

たとえば、 携帯電話番号: - 919967288367 この番号は2番目のシリーズに一致しています。それで私たちは下に戻ります。

919967200000|919967299999|MAHARASHTRA|AIRTEL|15|20 

この値は直接値が必要です。パフォーマンスベースでループを使用していないためです。

私は10000シリーズを持っています。

助けてください。

答えて

0

最も簡単な方法は、メンバーが行で、そのスコアが範囲の開始点であるソートセットを使用することです。

例:数クエリに

ZADD ops 918005000000 "918005099999|UP EAST|BSNL|4|22" 919967200000 "919967299999|MAHARASHTRA|AIRTEL|15|20" 

ZREVRANGEBYSCORE ops 919967288367 -inf LIMIT 0 1 
+0

が良いでしょう:例えば、ZREVRANGEBYSCORE演算子919967288367 -inf LIMIT 0 5は、両方の系列を表示するようになります。 – user3532146

+0

@ user3532146私はそれを理解しているのか分かりません。 –

-1

解決策は簡単です! 代わりにという値としてシリーズをキーとして保存します。

詳細: これらのシリーズをRedisのキーと値として保存します。

キー:918005000000 :918005099999 | UP EAST | BSNL | 4 | 22

キー:9199.672億:919967299999 |マハラシュトラ|エアテル| 15 | 20

携帯電話番号の場合は、 のようなキーパターンを作成してください9199672*と一致するキーをすべて取得します。

このキーのセットから最小のキーを選択し、redisから値を取得します。

+0

有害なアンチパターンだ - 鍵空間を横断するので、そのプレフィックスに基づいて取得したキーを使用すると、Redisの中でやりたいものではありません高価な操作です。 –

+0

あなたの洞察をいただきありがとうございます。しかし、正確に10000シリーズがあるので、プレフィックスに基づいてキーを取得することは、オーバーヘッドの多くを引き起こすことはありません。さらに、それは有害なIMHOではない既知の一定のオーバーヘッドです。下投票のみではなく、より良い選択肢を提案してください。 – code

+0

私は実際には代替案を提案していましたが、それに関係なく、完全スキャンを推奨するのは最後の手段です。 –

関連する問題