web-dev-qa-db-ja.com

redis初心者-ハッシュ内にハッシュを作成する方法?

このタイプの構造をredisで作成したい:(基本的にはjsonデータ)

{
    "id": "0001",
    "name":"widget ABC",
    "model": "model123",
    "service":"standard",
    "admin_password": 82616416,
    "r1":
        {
            "extid":"50000",
            "password":"test123",
        },
    "r2":
        {
            "ext":"30000",
            "password":"test123",
        },
}

これまでに試したこと:

「サブ」ハッシュなしでハッシュを作成しようとしましたが、これは基本的なことを確認するためです。これが、redis-cliから始めたものです。

HMSET widget:1 id 0001 name 'widget ABC' model 'model123' service standard admin_password 82616416
HMSET widget:2 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234

それはうまくいくようです。ウィジェットコレクションにウィジェットデータの2つの「レコード」があることがわかります。

しかし、r1データでレコードを作成しようとすると失敗します。

これは私が試したものです:

HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1{extid 50000} 

これにより、ハッシュ値「50000}のハッシュキー「r1 {extid」が作成されます。

任意の提案をいただければ幸いです。私の問題は私の専門用語だと思います。私のグーグル検索で使用する単語を知るには、redis構文について十分に理解していません。

たぶん、次のようにデータを「フラット化」する必要があります。

HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1_extid 50000 r1_password test123 r2_extid 30000 r2_password test123

ありがとう。

11
Happydevdays

Redisはネストされたデータ構造をサポートしていません。具体的にはハッシュ内のハッシュをサポートしていません:)基本的に、2つのオプションから選択できます。内部ハッシュをシリアル化してハッシュフィールドに保存するか、別のハッシュキーを使用します。外部ハッシュのフィールドにそれへの参照を保持するだけです。

13
Itamar Haber

ReJSON をお勧めします。これらの問題を正確に処理するように構築されています。

パス表記 を使用して、ネストされた要素にアクセスできます。

1
Cihan B.