Redisでハッシュを管理する方法
紹介
Redisはオープンソースのインメモリキー-バリューデータストアです。Redisのハッシュは、文字列フィールドと文字列値の間のマッピングを表すデータ型です。ハッシュは多くのフィールド-バリューペアを持つことができ、あまりスペースを取らないように設計されているため、データオブジェクトを表現するのに理想的です。たとえば、ハッシュは顧客を表し、name、address、email、またはcustomer_idのようなフィールドを含むことがあります。
このチュートリアルでは、Redisにおけるハッシュの管理方法について、ハッシュの作成からデータの取得および削除までを説明します。
このガイドの使い方
このガイドは、自己完結型の例を含むチートシートとして書かれています。あなたが達成しようとしているタスクに関連するセクションに飛んでください。
このガイドに示されているコマンドは、Redisバージョン6.0.16を実行しているUbuntu 22.04サーバーでテストされました。同様の環境を設定するには、Ubuntu 22.04にRedisをインストールしてセキュリティを確保する方法に関するガイドのステップ1に従ってください。これらのコマンドがどのように動作するかを示すために、Redisコマンドラインインターフェースであるredis-cliを使用して実行します。別のRedisインターフェース(たとえばRedli)を使用している場合、一部のコマンドの正確な出力が異なる場合があります。
また、これらのコマンドをテストするために、管理されたRedisデータベースインスタンスを用意することもできますが、データベースプロバイダーによって許可される制御のレベルに応じて、このガイドの一部のコマンドが説明通りに動作しない可能性があることに注意してください。DigitalOceanのマネージドデータベースを用意するには、マネージドデータベース製品のドキュメントに従ってください。その後、Redliをインストールするか、TLS経由でマネージドデータベースに接続するためにTLSトンネルをセットアップする必要があります。
ハッシュを作成する
ハッシュを作成するには、hsetコマンドを実行します。このコマンドは、ハッシュキーの名前、フィールド文字列、および対応する値文字列を引数として受け取ります:
- hset poet:Verlaine nationality French
注:この例および次の例では、poet:Verlaineがハッシュキーです。ドット、ダッシュ、およびコロンは、複数の単語のキーやフィールドをより読みやすくするためによく使用されます。キーが一貫性があり、人間が読みやすい形式に従っていることを確認することが役立ちます。
hset は、指定されたフィールドが新しいフィールドであり、値が正しく設定された場合に (integer) 1 を返します:
(integer) 1
しかし、値、フィールド、またはハッシュキーの名前を含めない場合、hsetはエラーを返します。
また、hsetはすでに存在する場合、ハッシュの内容を上書きすることに注意してください:
- hset poet:Verlaine nationality Francais
フィールドがすでに存在し、その値が正常に更新された場合、hset は (integer) 0 を返します:
(integer) 0
ハッシュにフィールドを追加するには hsetnx を使用することもできますが、これはフィールドがまだ存在しない場合にのみ機能します。指定したフィールドがすでに存在する場合、hsetnx は何の効果もなく、(integer) 0 を返します。
- hsetnx poet:Verlaine nationality French
(integer) 0
複数のフィールド/値ペアを指定されたセットに設定するには、hmsetコマンドと対応するフィールド/値の文字列を続けて使用します:
- hmset poet:Verlaine born 1844 died 1896 genre Decadent
hmset は成功した場合、OK を返します。
ハッシュから情報を取得する
特定のハッシュにフィールドが存在するかどうかは、hexistsコマンドを使用して判断できます:
- hexists poet:Verlaine nationality
hexists は、フィールドが存在する場合 (整数) 1 を返し、存在しない場合は (整数) 0 を返します。
フィールドの値を返すには、hgetコマンドを実行し、次にハッシュキーと取得したいフィールドを指定します:
- hget poet:Verlaine nationality
"Francais"
hmgetは同じ構文を使用しますが、複数のフィールドの値を返すことができます:
- hmget poet:Verlaine born died
1) "1844"
2) "1896"
もし、hget または hmget に渡すハッシュが存在しない場合、両方のコマンドは (nil) を返します。
- hmget poet:Dickinson born died
1) (nil)
2) (nil)
特定のハッシュに含まれるすべてのフィールドのリストを取得するには、hkeys コマンドを実行します:
- hkeys poet:Verlaine
1) "nationality"
2) "born"
3) "died"
4) "genre"
逆に、hvalsを実行してハッシュ内に保持されている値のリストを取得します:
- hvals poet:Verlaine
1) "French"
2) "1844"
3) "1896"
4) "Decadent"
ハッシュが保持しているすべてのフィールドとそれに関連する値のリストを返すには、hgetallを実行します:
- hgetall poet:Verlaine
1) "nationality"
2) "French"
3) "born"
4) "1844"
5) "died"
6) "1896"
7) "genre"
8) "Decadent"
ハッシュのフィールド数は、hlenを実行することで確認できます。これは「hash length」の略です。
- hlen poet:Verlaine
(integer) 4
フィールドに関連付けられた値の文字列の長さは、hstrlenを使用して確認できます。これは「hash string length」の略です。
- hstrlen poet:Verlaine nationality
(integer) 8
hlenは、ハッシュが存在しない場合、(integer) 0を返します。
ハッシュからフィールドを削除する
ハッシュからフィールドを削除するには、hdel コマンドを実行してください。hdel は複数のフィールドを引数として受け付けることができ、ハッシュから削除されたフィールドの数を示す整数を返します。
- hdel poet:Verlaine born died
(integer) 2
存在しないフィールドをhdelに渡すと、そのフィールドは無視されますが、指定した他の既存のフィールドは削除されます。
結論
このガイドでは、Redisでハッシュを作成および管理するために使用されるいくつかのコマンドについて詳述しています。このガイドで学びたい他の関連コマンド、引数、または手順がある場合は、お気軽に質問したり、コメントで提案を行ったりしてください。
Redisコマンドに関する詳細情報は、Redisデータベースの管理方法に関するチュートリアルシリーズをご覧ください。