2016-04-07 9 views
0

私はredisを初めて使っています。私はredisを使ってmacアドレステーブルキャッシュを実装する必要があります。 キャッシュ内の各エントリは、次の情報を持ちます。Redisのネストされたクエリ

(1) Macアドレス - 6バイトの配列

(2)。 VLAN - 整数値

(3)インタフェースID - 整数値(代わりに必要な場合は、文字列にすることができます)。

Mac-address + Vlanの組み合わせは、キャッシュ全体で一意です。これはおそらく鍵でしょうか?

私は例えばのために、複数の方法で、私のキャッシュを照会できるようにしたい:

(1)。 vlan == 20

(2)のすべてのエントリを取得してください。 vlan == 20、interface-id == 5000のすべてのエントリを取得してください。

これをRedisに保存するにはどうすればよいでしょうか。どんな助けもありがとうございます。 ありがとう、 Mo

+0

http://www.tutorialspoint.com/redis/redis_hashes.htm – Rabea

+0

これらは** **クエリの種類のみですか? –

答えて

0

これらの2つのクエリだけがあると仮定して、データを1つのソートセットに保持します。新しいMACは、0のスコアを使用して、次の方法であなたのメンバー(文字列)を構築する

ときZADD:上記で

ZADD MAC-address-table 0 <vlan>:<interface-id>:<MAC> 

、確認して、そのVLANとinterface-両方idは、必要に応じて0で左にパディングされた定数幅です。これらは32ビットの符号なし整数型と仮定すると、これは次のようになります。スコアは、あなたがZRANGEBYLEXを使用できるようにソートセットは、辞書順にソートされるようになりますよう

ZADD MAC-address-table 0 00020:05000:XYZCBA 

は0を使用しました。第一クエリは次のとおりです。

ZRANGEBYLEX MAC-address-table 00020: 00020:\xff 

\xffが文字255で、最後の文字であることは、それは辞書順で最後であることを意味します)。同様に、2番目のクエリ:

ZRANGEBYLEX MAC-address-table 00020:05000 00020:05000\xff 
+0

ありがとうございます。 Itamar:エントリを挿入すると、mac-address + vlanの組み合わせエントリが存在しない場合にのみ、新しいエントリを作成するようにredisに指示する方法があります。そうでなければ、既存のエントリを更新してください。または、明示的にチェックを行う必要がありますか? –

+0

あなたはMAC + vlanを別のデータ構造に保つ必要があります - 通常のSetは適切だと思われますが、ZADD –

+0

okを受け取る前に手動でチェックしてください。 –

0

これはまさに私があなたの質問に私のコメントを入れた理由です...できません。あるいは、別のソートセットやredimensionという別のテクニックを使用する必要があります - Redis.ioのセカンダリインデックスdocページを参照してください。

+0

確かに、もう一度Itamarに感謝します。 –

+0

おっと - それは答えではなくコメントになっていたはずです...そこに移動してこれを削除しても、あなたは大歓迎です:) –