2016-10-31 10 views
-1

重複したレコードを識別するためにRedisインスタンスを使用したいと思います。重複した識別のためにRedisを設定する

いずれのレコードも2つの機能で識別できます。最初の機能は文字列のハッシュです。 2番目の機能は、ハッシュの配列です。したがって、新しいレコードは、文字列ハッシュに一致するものがある場合、またはハッシュの配列内の要素が他の要素の別の配列に存在する場合は、重複しているとみなされます。

例:

レコード1: Id: 1, feature 1: ABC, feature 2: [aa,bb,cc]

レコード2: Id 2, feature 1: ABC, feature 2: []--->レコード1

レコード3と重複: Id 3, feature 1: DDA, feature 2: [ff,bd,aa]-->レコード1と重複(一致aaに)

どうすればいいですか?このような操作を実行するには、Redisを最も効率的に使用します。

おかげ

答えて

0

あなたは各機能のために、IDを記録する機能からのインデックスマッピングを構築することができます。

IDを記録する最初のインデックス

ハッシュ文字列。このインデックスのすべてのキーは、キーの接頭辞があります:fea1:

set fea1:ABC 1 

2番目のインデックス

IDを記録するハッシュ配列の要素。このインデックスのすべてのキーは、キーの接頭辞があります:fea2:

set fea2:aa 1 
set fea2:bb 1 
set fea2:cc 1 

重複識別

  1. 、すなわちハッシュ文字列を第一の特徴でキーをビルドし、最初の検索しますインデックス:

    exists fea1:ABC exists fea1:DDA

  2. 、第2の機能を備えたキーを構築し、最初のインデックスに存在し、2番目のインデックスを検索しない場合は、次のRedis 3.0.3以来

    exists fea2:ff exists fea2:bd exists fea2:aa

EDIT

existsコマンドは、複数のキーの存在を確認できます。だから、あなただけの1 Redisのコマンド呼び出しで2番目のインデックスを検索することが可能です。あなたもこのため設定にを使用することができます

exists fea2:ff fea2:bd fea2:aa 
+0

おかげで同じことを行います。私はここで複雑さを少し心配しています.2番目のフィーチャ配列に大きな数字がある場合、 'exists'をN回呼び出す必要があります – AhmadAssaf

+0

@AhmadAssafそれについて心配しないでください。 Redis 3.0.3以降、 'exists'は複数のキーの存在をチェックでき、一度呼び出すだけで済みます。古いバージョンを使用している場合、パイプラインを使用してTTLを減らすことができます。また、すべての作業をluaスクリプトにラップすることもできます。 'eval'または' evalsha'を一度呼び出すだけです。 –

0

- SADD feature1 ABCによって第一の特徴の開始のためにhttp://redis.io/commands/sadd

を参照してください、SADDが返されますセットに追加された要素の数。すでにセットに含まれているすべての要素を含みません。

値が小さい場合、追加しようとした値の数よりも小さい場合は、重複します。

は、第二の特徴のために多くのあなたの答えのための SADD feature2 aa bb cc

関連する問題