sql >> データベース >  >> NoSQL >> Redis

Redis-ソートされたセット、プロパティ値でアイテムを検索

    とても簡単だと思います。

    解決策1(劣る、推奨されない)

    ZSCAN MySet 0 MATCH Id:92 count 1の方法 保存された文字列が"{\"Id\":\"92\"...であるため、うまくいきませんでした "{\"Id:92\"...ではありません 。文字列が別の形式に変更されました。したがって、MATCH Id\":\"64を使用してみてください または、redisのjsonシリアル化データと一致するようなもの。私はjson.netに精通していないので、実際の文字列はあなたが発見できるように残されています。

    ちなみに、ZSCAN MySet 0 MATCH Id:92 count 1 カーソルを返しますか? ZSCANを使用したと思われます 間違った方法で。

    解決策2(より良い、強くお勧めします)

    ZSCAN ソートされたセットが大きくなく、RedisのLuaトランザクションによってネットワークラウンドトリップ時間を節約する方法を知っている場合に適しています。これでも「IDで検索」操作O(n)になります。したがって、より良い解決策は、次の方法でデータモデルを変更することです。

    ソートされたセットを変更する

    #   Score   Value
    0   1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
    1   1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}
    

    #   Score   Value
    0   1443476076 Id:92
    1   1443482969 Id:11
    

    残りの詳細データを別のハッシュタイプキーのセットに移動します:

    #   Key   field-value field-value ...
    0   Id:92 Ref-7ADT DTime-1443476076 ...
    1   Id:11 Ref-7ADT DTime-1443476076 ...
    

    次に、hgetall id:92を実行して、IDで検索します。 。日付による範囲クエリについては、ZRANGEBYSCORE sortedset mindate maxdateを実行する必要があります 次にhgetall すべてのIDを1つずつ。これらのコマンドを1つにまとめるには、luaを使用する方がよいでしょう。それでも、超高速です!

    NoSqlデータベースのデータは、上記のように冗長な方法で整理する必要があります。これにより、通常の操作に複数のコマンドとラウンドトリップが含まれる場合がありますが、redisのlua機能で対処できます。 redisのlua機能を強くお勧めします。コマンドを1つのネットワークラウンドトリップにラップします。これらはすべてredisサーバー側で実行され、アトミックで超高速です!

    わからないことがあれば返信してください




    1. ハイブリッドクラウドとフルパブリッククラウド-長所と短所

    2. MongoDBドキュメントの複数のフィールドを更新する

    3. Mongoでデータベースを作成しています:接続できません、接続に失敗しました

    4. MongoDBが持つことができるシャードの最大数はいくつですか?