Redis Jedis入門 – Jedisライブラリを使ってキーに対するCRUD操作を実行する方法
このチュートリアルでは、JavaのRedisクライアントライブラリ「Jedis」を使用して、キーに対するCRUD操作(作成・読み取り・更新・削除)を実行する方法を解説します。
Jedisライブラリとは
Jedisは、Redisデータストア向けのJavaクライアントライブラリです。軽量かつ非常に使いやすく、Redis 2.8.x、3.x.x以降のバージョンと完全な互換性があります。シンプルなAPI設計により、JavaアプリケーションからRedisの各種コマンドを直感的に呼び出せるのが特徴です。
Redisにおけるキーとは
Redisでは、キーはデータストアに保存された値を一意に識別するための識別子として機能します。値の保存・管理・取得はすべてこのキーを通じて行われます。キーには文字列だけでなく、リストやハッシュなどさまざまなデータ型の値を関連付けることができます。
プロジェクトのセットアップ
お好みのIDEでシンプルなMavenプロジェクトを作成し、pom.xmlファイルに以下の依存関係を追加してください。
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.1</version> </dependency>
最新版のJedisライブラリを使用したい場合は、Mavenセントラルリポジトリで最新のバージョン番号を確認してから設定してください。
Redisのインストール
動作確認には、最新版のRedisが必要です。公式ドキュメントやOSごとのインストールガイドを参照して、環境に合った方法でインストールを行ってください。Dockerを利用すれば、docker run -d -p 6379:6379 redisのように簡単にRedisサーバーを起動することもできます。
Jedis接続の確立
JavaコードからRedisに接続するには、Jedisクラス(redis.clients.jedis.Jedis)のオブジェクトを作成します。
Jedis jedis = new Jedis();
ローカルマシン上でRedisサービスがデフォルトポート(6379)で起動していれば、デフォルトコンストラクタでそのまま接続できます。それ以外の場合は、正しいホスト名とポート番号をコンストラクタの引数として渡す必要があります。
// ホストとポートを指定して接続する場合
Jedis jedis = new Jedis("localhost", 6379);
キーに有効期限(TTL)を設定する
キーに有効期限を設定するためのメソッドは4つあります。それぞれ以下の通りです。
- expire: キーに秒単位で有効期限を設定します。
/* key-1 に300秒(5分)の有効期限を設定 */ jedis.expire("key-1", 300); - pexpire: キーにミリ秒単位で有効期限を設定します。
/* key-1 に30000ミリ秒(30秒)の有効期限を設定 */ jedis.pexpire("key-1", 30000); - expireAt: 秒単位のUnixタイムスタンプで有効期限の日時を指定します。
/* key-1 の有効期限をUnixタイムスタンプ(秒)で指定 */ jedis.expireAt("key-1", 1543622400); - pexpireAt: ミリ秒単位のUnixタイムスタンプで有効期限の日時を指定します。
/* key-1 の有効期限をUnixタイムスタンプ(ミリ秒)で指定 */ jedis.pexpireAt("key-1", 154362240000L);
キーの有効期限を取得する
キーに設定された残りの有効期限を取得するメソッドは2つあります。
- ttl: キーの残り有効期限を秒単位で返します。
/* key-1 の残り有効期限を秒で取得 */ jedis.ttl("key-1"); - pttl: キーの残り有効期限をミリ秒単位で返します。
/* key-1 の残り有効期限をミリ秒で取得 */ jedis.pttl("key-1");
なお、有効期限が設定されていないキーに対しては -1、存在しないキーに対しては -2 が返される点に注意してください。
有効期限を削除する
persistメソッドを使用すると、Redisデータストア内のキーから有効期限を削除できます。これにより、キーは永続的なデータとして扱われるようになります。
/* key-1 の有効期限を削除 */
jedis.persist("key-1");
すべてのキーを取得する
keysメソッドは、指定したパターンに一致する1つ以上のキーを返します。
/* データストア内のすべてのキーを取得 */
jedis.keys("*");
/* 「a」で始まり「b」で終わるすべてのキーを取得 */
jedis.keys("a*b");
本番環境では keys * のような全件検索はパフォーマンスに影響を与える可能性があるため、大量のキーを扱う場合は scan コマンドの利用も検討しましょう。
キーの削除
delメソッドは、Redisデータストアからキーを削除するために使用します。複数のキーを一度に削除することも可能です。
/* key-1 をデータストアから削除 */
jedis.del("key-1");
/* key-1、key-2、key-3 をデータストアから削除 */
jedis.del("key-1", "key-2", "key-3");
キーの存在確認
existsメソッドは、キーがRedisデータストアに存在するかどうかをチェックするために使用します。
/* key-1 がデータストアに存在するか確認 */
Boolean exist = jedis.exists("key-1");
/* key-1、key-2、key-3 のうち存在するキーの数を確認 */
Long exist = jedis.exists("key-1", "key-2", "key-3");
/* 存在する場合は1以上、存在しない場合は0が返されます */
データ型の確認
typeメソッドは、キーに格納されている値のデータ型(string、list、set、hash、zsetなど)を取得するために使用します。
/* key-1 に格納された値のデータ型を取得 */
jedis.type("key-1");
Dump(シリアライズ)
dumpメソッドは、キーに格納されている値をシリアライズした形式で返します。この戻り値を restore コマンドと組み合わせれば、別のキーや別のRedisインスタンスへデータを複製することもできます。
/* key-1 に格納された値をシリアライズして取得 */
jedis.dump("key-1");
キーのリネーム
データストア内のキー名を変更するメソッドは2つあります。
- rename: キーを古い名前から新しい名前に変更します。新しい名前のキーがすでに存在する場合は上書きされ、古い名前のキーは削除されます。
/* old-key を new-key にリネーム */ jedis.rename("old-key", "new-key"); - renamenx: 新しい名前のキーが存在しない場合にのみ、キーをリネームします。既存キーがある場合は何も変更されず、0が返されます。
/* new-key が存在しない場合のみ old-key を new-key にリネーム */ jedis.renamenx("old-key", "new-key");
参考資料
- Redis公式ドキュメント:Keyコマンド一覧
- Jedis公式GitHubリポジトリ
まとめ
この記事では、Jedisライブラリを使用してRedisのキーに対してCRUD操作を実行する方法を学びました。有効期限の設定・取得・削除から、キーの検索、削除、存在確認、型の確認、リネームまで、日常的に使う主要なキー操作を網羅しています。この記事が役に立ったと思ったら、ぜひコメントで感想を共有したり、他の方にも紹介してみてください。
-
Redisデータストアから文字列値を取得する方法 – GET・MGETコマンドの使い方を解説
このチュートリアルでは、Redisデータストアに保存されているキーの文字列値を取得するために使用する、GETコマンドとMGETコマンドの使い方について詳しく解説します。 GETコマンドとは GETコマンドは、指定したキーに保存されている文字列値を取得するために使用します。動作のポイントは以下の通りです。 キーが存在しない場合は (nil) が返されます キーは存在するが、その値が文字列型でない場合はエラーが返されます 構文 redis host:port> GET <キー名> 戻り値 - (string) キーに保存されている文字列値 - (nil) キーが存在しない
-
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(パブリッシュ/サブスクライブ)型のメッセージ