Redis Jedis – Jedisライブラリでハッシュ値に対するCRUD操作を実行する方法
このチュートリアルでは、Jedisライブラリを使用して、Redisのハッシュ値に対してCRUD操作(作成・読み取り・更新・削除)を実行する方法を解説します。
Jedisライブラリとは
Jedisは、Redisデータストア向けのJavaクライアントライブラリです。軽量で非常に使いやすく、Redis 2.8.x、3.x.x以降のデータストアと完全な互換性があります。詳細については、Jedis公式ドキュメントをご参照ください。
ハッシュ値とは
ハッシュは「フィールド」と「値」のペアからなるマップ構造であり、Javaオブジェクトのようなオブジェクト型を表現するのに適しています。Redisでは、ハッシュを値として保存することができ、さまざまなRedisコマンドを使って、データベース内のハッシュ値の保存・管理・取得を行えます。ハッシュ関連コマンドの詳細は、公式ドキュメントを確認してください。
プロジェクトのセットアップ
お好みのIDEでシンプルなMavenプロジェクトを作成し、以下の依存関係をpom.xmlファイルに追加してください。
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.1</version> </dependency>
Jedisライブラリの最新バージョンは、Mavenセントラルリポジトリのページで確認できます。
Redisのインストール
最新版のRedisをインストールしておく必要があります。インストール手順の詳細については、Redis公式サイトのドキュメントをご確認ください。
Jedis接続
JavaコードをRedisに接続するには、Jedisクラス(redis.clients.jedis.Jedis)のオブジェクトを作成します。
Jedis jedis = new Jedis();
ローカルマシン上でデフォルトポート(6379)を使ってRedisサービスを起動している場合は、デフォルトコンストラクタがそのまま利用できます。それ以外の場合は、正しいホストURLとポート番号を引数としてコンストラクタに渡す必要があります。
フィールド値の作成と設定(Create / Update)
ハッシュ値内のフィールドに値を設定するためのメソッドは3種類あります。それぞれ以下の通りです。
- hset: ハッシュ値内の指定フィールドに値を設定します。フィールドが既に存在する場合は値が上書きされ、キーが存在しない場合は、設定操作の前にハッシュ値を保持する新しいキーが自動的に作成されます。
/* <hash-1> にnameフィールドを挿入 */ jedis.hset("hash-1", "name", "john"); /* <hash-2> にnameフィールドを挿入 */ jedis.hset("hash-2".getBytes(), "name".getBytes(), "john".getBytes()); - hsetnx: フィールドが存在しない場合にのみ、値を設定します。既存フィールドがある場合は何も行われません。キーが存在しない場合は、新しいキーが作成されます。
/* <hash-1> にnameフィールドを挿入 */ jedis.hsetnx("hash-1", "name", "john"); /* <hash-2> にageフィールドを挿入 */ jedis.hsetnx("hash-2".getBytes(), "age".getBytes(), "23".getBytes()); - hmset: 複数のフィールド/値ペアを一度に設定します。指定したいずれかのフィールドが既に存在する場合は、その値が上書きされます。キーが存在しない場合は、新しいキーが作成されます。
/* <hash-1> にnameとageフィールドを挿入 */ Map<String,String> map = new HashMap<String, String>(); map.put("name","john"); map.put("age","23"); jedis.hmset("hash-1", map);
フィールド値の取得(Read)
ハッシュ値内のフィールドに関連付けられた値を取得するメソッドは2種類あります。
- hget: ハッシュ値内の単一のフィールドに関連付けられた値を返します。
/* <hash-1> のnameフィールドの値を取得 */ jedis.hget("hash-1", "name"); - hmget: ハッシュ値内の1つ以上のフィールドに関連付けられた値を返します。
/* <hash-1> のnameとageフィールドの値を取得 */ jedis.hmget("hash-1", "name", "age");
サイズの取得
hlenメソッドを使用すると、指定したキーに保存されているハッシュ値に含まれるフィールドの数を取得できます。
/* <hash-1> のフィールド数を返す */
jedis.hlen("hash-1");
フィールドの削除(Delete)
hdelメソッドは、キーに保存されているハッシュ値から1つ以上のフィールドを削除する際に使用します。
/* <hash-1> からnameとageフィールドを削除 */
jedis.hdel("hash-1", "name", "age");
/* <hash-2> からnameとageフィールドを削除 */
jedis.hdel("hash-2".getBytes(),"name".getBytes(),"age".getBytes());
フィールドの存在確認
hexistsメソッドは、指定したフィールドがハッシュのメンバーであるかどうかを確認するために使用します。
/* nameが<hash-1>のメンバーかどうかを確認 */
jedis.hexists("hash-1", "name");
/* nameが<hash-2>のメンバーかどうかを確認 */
jedis.hexists("hash-2".getBytes(),"name".getBytes());
すべてのフィールドと値を取得
hgetallメソッドは、キーに保存されているハッシュ値に含まれるすべてのフィールドと、それに関連付けられた値を取得するために使用します。
/* <hash-1> のすべてのフィールドと値を返す */
jedis.hgetAll("hash-1");
/* <hash-2> のすべてのフィールドと値を返す */
jedis.hgetAll("hash-2".getBytes());
すべてのフィールド名を取得
hkeysメソッドは、キーに保存されているハッシュ値に含まれるすべてのフィールド名を取得するために使用します。
/* <hash-1> のすべてのフィールド名を返す */
jedis.hkeys("hash-1");
/* <hash-2> のすべてのフィールド名を返す */
jedis.hkeys("hash-2".getBytes());
すべての値を取得
hvalsメソッドは、キーに保存されているハッシュ値に含まれるすべてのフィールドの値を取得するために使用します。
/* <hash-1> のすべての値を返す */
jedis.hvals("hash-1");
/* <hash-2> のすべての値を返す */
jedis.hvals("hash-2".getBytes());
参考資料
- Redis Hashコマンド公式ドキュメント
以上、Jedisライブラリを使用してハッシュ値に対するCRUD操作を実行する方法の解説でした。この記事がお役に立てたなら、ぜひコメント欄でご意見をお聞かせください。また、周囲の方へのシェアも歓迎します。
-
Redis HGETALLコマンドの使い方 – ハッシュに含まれるすべてのフィールドと値のペアを一括取得する方法
このチュートリアルでは、Redisのキーに保存されたハッシュ値に含まれるすべてのフィールドと値のペアを取得する方法について解説します。この操作には、RedisのHGETALLコマンドを使用します。 HGETALLコマンドとは HGETALLコマンドは、指定したキーに保存されているハッシュ値に含まれるすべてのフィールドと、それぞれに関連付けられた値を返すコマンドです。 動作のポイントは以下の通りです。 キーが存在しない場合は、空のリストが返されます(エラーにはなりません)。 キーは存在するが、その値がハッシュ型ではない場合は、エラーが返されます。 構文 redis host:port>
-
JedisライブラリでRedisのPub/Subシステムを実装する方法【Javaサンプルコード付き】
このチュートリアルでは、Java向けクライアントライブラリ「Jedis」を使用して、RedisのPub/Sub(パブリッシュ/サブスクライブ)システムを実装する方法を解説します。 Jedisライブラリとは Jedisは、Redisデータストア用のJavaクライアントライブラリです。軽量で非常に扱いやすく、Redis 2.8.x、3.x.x以降のバージョンと完全な互換性があります。シンプルなAPI设计で、Redisの各種コマンドを直感的に操作できるのが特徴です。 RedisのPub/Subシステムとは Redisは、Publish/Subscribe(パブリッシュ/サブスクライブ)型のメッセージ