AzureでホストされているRedisの使用を検討しています。StackExchange nugetを使用した最初の使用例は、顧客ベースに対する検索です。これは当初約10,000人の顧客ですが、時間の経過とともに成長します。
顧客は、次のような特定の検索モデルになります。
{
"Id": 123,
"Name": "Bob Smith",
"Age": 72,
"Postcode": "AB123EF",
"Email": "[email protected]",
"Telephones": [
"07710123456",
"01453123456"
]
}
私の理解では、大きなblobオブジェクトをRedisに入力することは避けるべきであるため、リストを1つのオブジェクトとして保存することはお勧めできません。そのため、List *関数を使用して、各アイテムをキーの下に格納し、データをシリアル化しました。
最初の作業は次のようになります。
var tasks = new List<Task>();
foreach (var customer in customers)
{
tasks.Add(db.ListLeftPushAsync(_key, JsonConvert.SerializeObject(customer)));
}
await Task.WhenAll(tasks).ConfigureAwait(true);
これはすべて期待どおりに機能します。ある程度の最適化があると確信していますが、問題ないようです。
それは基本的に私たちに情報を照会するという問題を残しました。Redisがすべてを文字列として保存することは理解していますが、リストは文字列ではなくRedisオブジェクトであるため、リストを検索する方法がわかりません。したがってListRange(_key).Where(c => c.Contains("Bob"))
、たとえば使用することはできません。
私たちのアプローチがこれに関して間違っているか、私がちょうど欠けている方法があるかどうか私に知らせてください。
RediSearch
@GuyKorlandが、redisに基づくカスタム検索エンジンを実現するのではなく、のような成熟した製品を使用する必要があると言ったことに完全に同意します。
ただし、redisの知識に基づいて、redisのデータ構造を使用して簡単な検索エンジンを実装する方法を簡単に紹介できてとてもうれしいです。
まず、サンプル顧客のような顧客データをredisに保存する方法。ご存知のとおり、redisはメモリ上のKVデータベースであるため、以下のようにHash
、一意Id
のプレフィックスを使用して、オブジェクトまたはjsonデータをキーを使用してredis構造としてフラットに保存できます。
CUSTOM#123 =>
Id => 123
Name => Bob Smith
Age => 72,
Postcode => AB123EF
Email => [email protected]
Telephones#0 => 07710123456
Telephones#1 => 01453123456
次に、以下のように、redisList
またはSorted Set
structureを使用して、オブジェクトクラスのすべてのプロパティのインデックスを作成します。
たとえば、List
forName
とAge
プロパティを使用します。アイデアは、シンボルと同様にオブジェクトの値をNAME
連結するようなプレフィックスを使用して、redisキーを構築し、その値をredis要素として格納することです。Name
Bob
#
Id
List
\\ To build `NAME` index for all objects contains `Bob`, `Smith` and `Bob Smith` in the `Name` propertory
NAME#Bob => 123, ...
NAME#Smith => 123, ...
NAME#Bob Smith => 123, ...
\\ Do the same operation above to build `AGE` index
AGE#72 => 123, ...
最後に、コマンドを使用して顧客のリストを正確に取得するか、コマンドを使用して顧客のリストをBob
あいまいに取得することにより、プレフィックスが付いたredisキーを検索できます。その後、値を持つプロパティを含むこれらの顧客データを継続的に取得できます。顧客のリストを並べ替える場合は、リストの結果を並べ替える代わりにを使用する必要があります。NAME#
GET NAME#Bob
Id
keys NAME#Bob*
Id
Name
Bob
Id
Sorted Set
List
Id
私はまだ、などのredisに基づいた成熟した製品を使用することをお勧めしますRediSearch
。これは、ニーズを迅速に実現するのに役立ちます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加