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

Redisで複数のキーのハッシュのフィールドの名前を変更する方法

    たとえば、under_scoresを使用してフィールドに名前を付け始め、別のチームメンバーがキャメルケースを使用したとします。これで、redisハッシュは混乱し、1つの規則に固執したいと思います。すべてのハッシュでフィールドの名前を変更する方法が必要です。

    Redisには、ハッシュ内のフィールドの名前を変更する方法がありません。しかし、もっと重要なことは、作成したすべてのハッシュに対してそれを行う方法がないことです。

    幸いなことに、混乱を修正するために必要なのは、コマンドラインの魔法だけです。


    このコマンドは、パターンusers:*に一致するキーを検索し、フィールドの名前を変更します

    • creation_dateからcreationDate
    • posttypeidからpostTypeId
    • view_countからviewCountへ
    • …など
    欠落している「hrename」コマンド

    Redisにはhrenameコマンドがないため、最初にluaスクリプトで記述します。このコマンドは、単一のハッシュ内のフィールドの名前を変更します。

    evalsha <script-sha1-identifier> 1 <key> <old-field-1> <new-field-1>...


    最初にスクリプトをロードする必要があります。コマンドcat hrename.lua | redis-cli -x script load スクリプトをロードし、SHA1識別子を返します。この識別子は、スクリプトを呼び出すときにいつでも使用できます。

    複数のハッシュのフィールドの名前を変更する

    単一のハッシュを修正するコマンドができたので、パターンに一致するすべてのハッシュに対してループで実行する必要があります。スクリプトhash_bulk_rename_fields.sh まさにそれを行います。

    1. まず、redis-cli --scan --pattern <pattern>を使用します キーのリストを取得するには、1行に1つのキーを使用します。
    2. 次に、キーをgrepに渡します。 。 Redis scanコマンドは正規表現を受け入れないため、scanを使用して基本的なフィルタリングを行い、grepを介してより適切な正規表現を提供します。
    3. 次に、キーごとにawkスクリプトを実行します。このawkスクリプトは少し複雑なので、分解します
    4. awkスクリプトにはコマンドテンプレートがありますevalsha <sha1> 1 __key__ <old field name> <new field name>.. 。これは、すべてのキーに対して実行されるコマンドです。
    5. 一致するキーごとに、awkコマンドが__key__を置き換えます。 実際のキーで
    6. 次に、stringコマンドをredisプロトコル形式に変換します。これは、redisが理解する生の形式です。
    7. 最後に、–pipeフラグを使用してrawコマンドをredis-cliにパイプします。これは、一括コマンドをredisに送信するための最も効率的な方法です。
    このスクリプトのカスタマイズ
    1. --patternを変更できます ハッシュタイプのキーを選択するためのgrepコマンド
    2. cmd_templateをカスタマイズできます 名前を変更するフィールドを含める
    3. redisサーバーがローカルホスト上にない場合は、ホスト、ポート、およびパスワードを2回提供する必要があります。 コマンドで、基本的にredis-cliを呼び出すときはいつでも。
    関連項目
    • スキャンを使用して複数のキーの名前を変更する
    • パターンに一致するキーを削除する
    • 有効期限を複数のキーに設定
    • Redis用のRDBToolsGUIを使用すると、一括アクションをプレビューでき、Redisのデータを管理するための強力なGUIが提供されます。無料でダウンロードできます!

    1. MongoDBにオートコンプリートを実装する

    2. ModulusとNode.jsを使用したリアルタイムチャット

    3. mongodbドキュメントのサブストリングを置き換える方法

    4. デフォルトのコレクションとデータを使用してMongoDockerイメージを作成するにはどうすればよいですか?