Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redis Jedis入門 – Jedisライブラリで地理空間データ(Geo)に対するCRUD操作を実行する方法

このチュートリアルでは、Javaクライアントライブラリ「Jedis」を使用して、Redisに保存された地理空間データ(ジオ値)に対してCRUD操作(作成・取得・更新・削除)を実行する方法を解説します。

Jedisライブラリとは

Jedisは、Redisデータストア向けのJavaクライアントライブラリです。軽量かつ非常に使いやすく、Redis 2.8.x、3.x.x以降のバージョンと完全な互換性があります。シンプルなAPI設計により、JavaアプリケーションからRedisのコマンドを直感的に操作できるのが特徴です。

地理空間データ(Geo Value)とは

地理空間データとは、地球上の特定の場所を示す経度(longitude)と緯度(latitude)の座標情報のことです。Redisでは、地理空間要素はキーに紐づくソート済みセット(Sorted Set)として保存され、専用のGeoコマンドを使用して保存・管理・取得を行います。内部的にはGeohashエンコーディングが使われており、位置情報の検索や距離計算を高速に処理できます。

プロジェクトのセットアップ

お好みのIDEでシンプルなMavenプロジェクトを作成し、pom.xmlファイルに以下の依存関係を追加してください。

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.0.1</version>
</dependency>

最新バージョンのJedisライブラリについては、Mavenセントラルリポジトリの公式ページで確認できます。

Redisのインストール

動作確認には最新版のRedisが必要です。お使いのOS(Windows、macOS、Linuxなど)に合わせて、公式ドキュメントの手順に従ってインストールしてください。Dockerを使用する場合は、docker run redisコマンド一つで簡単に環境を構築することも可能です。

Jedis接続の確立

JavaコードからRedisに接続するには、Jedisクラス(redis.clients.jedis.Jedis)のオブジェクトを作成します。

Jedis jedis = new Jedis();

ローカルマシン上でRedisサービスがデフォルトポート(6379)で起動している場合は、デフォルトコンストラクタでそのまま接続できます。それ以外の場合は、正しいホスト名とポート番号を引数としてコンストラクタに渡す必要があります。

地理座標の追加(Create)

geoaddメソッドを使用すると、指定したキーに保存された地理空間値(ソート済みセット)に、1つ以上の地理空間メンバーを追加できます。

/* ロンドンの地理座標を <geo-1> に挿入 */
jedis.geoadd("geo-1", 51.5074, 0.1278, "London");

/* ロンドンとパリの地理座標を <geo-2> に挿入 */
Map<String,GeoCoordinate> map = new HashMap<String, GeoCoordinate>();		
map.put("London", new GeoCoordinate(51.5074, 0.1278));
map.put("Paris", new GeoCoordinate(48.8566, 2.3522));
jedis.geoadd("geo-2", map);

単一メンバーの場合は経度・緯度・メンバー名を直接指定でき、複数メンバーをまとめて追加したい場合はGeoCoordinateオブジェクトを格納したMapを使用します。なお、geoaddの引数順序は「経度→緯度」の順になる点に注意しましょう。

地理座標の取得(Read)

geoposメソッドを使用すると、指定したキーに保存された地理空間値(ソート済みセット)内の1つ以上のメンバーについて、そのGeoCoordinate(経度・緯度)を取得できます。

/* <geo-1> からロンドンとパリのGeoCoordinateを返す */
List geoCoordinates = jedis.geopos("geo-1", "London", "Paris");

GeoHash文字列の取得

geohashメソッドを使用すると、指定したキーに保存された地理空間値内の1つ以上のメンバーについて、有効なGeohash文字列を取得できます。Geohashは位置情報を短い文字列で表現する方式で、近い場所ほど似た文字列になるという特性があります。

/* <geo-1> からロンドンとパリのGeoHash文字列を返す */
List geoStrings = jedis.geohash("geo-1", "London", "Paris");

2つのメンバー間の距離計算

geodistメソッドを使用すると、指定したキーに保存された地理空間値内の2つのメンバー間の距離を、指定した単位で取得できます。単位にはm(メートル)、km(キロメートル)、mi(マイル)、ft(フィート)を指定できます。

/* <geo-1> からロンドンとパリ間の距離をキロメートル単位で返す */
Double distance = jedis.geodist("geo-1", "London", "Paris", GeoUnit.KM);

この機能を活用すれば、「現在地から最寄りの店舗を探す」「配送可能範囲を判定する」といった位置情報ベースのアプリケーションを簡単に実装できます。

参考資料

  1. Redis公式ドキュメント:Geo コマンドリファレンス
  2. GitHub:Jedis ライブラリ公式リポジトリ

以上が、Jedisライブラリを使用して地理空間データに対するCRUD操作を実行する方法でした。この記事が役に立った場合は、ぜひコメント欄でご意見をお聞かせください。また、他の方にもシェアしていただけると嬉しいです。

  1. Redis GEORADIUSコマンド徹底解説 – 特定エリア内の位置情報データを取得する方法

    このチュートリアルでは、Redisに保存された位置情報(ジオスペーシャル)データの中から、特定のエリア内に存在する要素を取得する方法を解説します。そのために使用するのが GEORADIUS コマンドです。 GEORADIUSコマンドとは GEORADIUSコマンドは、キーに保存されたソート済みセット(Sorted Set)形式の位置情報データのうち、経度・緯度・半径の各引数から算出される円形エリアの境界内に含まれるメンバーを1つ以上返すコマンドです。 エリアは、指定した経度と緯度を円の中心とし、指定した単位での半径を円の半径として計算されます。 半径には以下のいずれかの単位を指定します。 m

  2. 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(パブリッシュ/サブスクライブ)型のメッセージ