ホームページ >データベース >Redis >Redis の特別なデータ型 地理空間

Redis の特別なデータ型 地理空間

WBOY
WBOY転載
2022-10-12 16:21:351629ブラウズ

前の記事「Redis 特別なデータ型ストリーム」では、データ型ストリームに関する関連コンテンツを紹介しました。この記事では、Redis 地理空間の別のデータ型について説明します。 、見てみましょう。皆さんの参考になれば幸いです。

Redis の特別なデータ型 地理空間

推奨される学習: Redis ビデオ チュートリアル

序文

Redis については誰もが知っています。 BitMap、HyperLogLog、Geospatial、Stream の 4 つの特殊なタイプを含む、豊富なデータ タイプを提供します。

今日は、Redis の 4 つの特別なデータ型の 1 つである地理空間について詳しく説明します。

アプリケーション シナリオ: 地理的位置情報を保存するシナリオ (Didi タクシーの呼び出しなど);

概要の紹介

著作権は作者に帰属します。商業転載の場合は作者に許可を、非商業転載の場合は出典を明記してください。

Redis Geospatial は、Redis バージョン 3.2 で追加された新しいデータ型で、主に地理的位置情報を保存し、保存された情報を操作するために使用されます。

私たちの日常生活では、「近くのレストラン」を検索したり、タクシー配車ソフトウェアでタクシーを呼んだりすることがますます重要になっていますが、これらはすべて位置情報サービス (Location-Based Service、LBS) アプリケーションと切り離すことができません。 LBS アプリケーションによってアクセスされるデータは、人や物に関連付けられた一連の経度と緯度の情報であり、隣接する経度と緯度の範囲をクエリする必要がある場合、GEO は LBS サービス シナリオでのアプリケーションに非常に適しています。

内部実装

GEO 自体は、新しい基礎となるデータ構造を設計せず、Sorted Set コレクション タイプを直接使用しました。

GEO タイプは、GeoHash エンコード方式を使用して、経度と緯度をソート セット内の要素の重みスコアに変換します。重要なメカニズムは、「2 次元マップの区間分割」と「区間のエンコード」の 2 つです。経度と緯度のセットが一定の範囲内に収まった後は、その範囲のエンコード値で表され、そのエンコード値が Sorted Set 要素の重みスコアとして使用されます。

このようにして、経度と緯度をSorted Setに保存し、Sorted Setが提供する「重みによる順序範囲検索」機能を利用することで、LBSでよく使われる「付近検索」機能を実装することができます。サービスが必要です。

#一般的なコマンド
# 存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。
GEOADD key longitude latitude member [longitude latitude member ...]
# 从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
GEOPOS key member [member ...]
# 返回两个给定位置之间的距离。
GEODIST key member1 member2 [m|km|ft|mi]
# 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

アプリケーション シナリオ

Didi Taxi##ここDidi のタクシー配車シナリオを例として、GEO コマンド GEOADD と GEORADIUS の使用方法を紹介します。

車両 ID が 33 で、緯度と経度の位置が (116.034579, 39.030452) であるとします。GEO コレクションを使用して、すべての車両の経度と緯度を保存できます。コレクション キーは、cars:locations です。

次のコマンドを実行して、ID 番号 33 の車両の現在の経度と緯度の位置を GEO コレクションに保存します。

GEOADD cars:locations 116.034579 39.030452 33

ユーザーが近くのオンライン配車サービスを見つけたい場合LBS アプリケーションでは GEORADIUS コマンドを使用できます。

たとえば、LBS アプリケーションが以下のコマンドを実行すると、Redis は入力されたユーザーの緯度経度情報 (116.054579, 39.030452) を元に、この経度緯度を中心に 5 キロメートル以内の車両情報を検索して返します。それを LBS アプリケーションに渡します。

GEORADIUS cars:locations 116.054579 39.030452 5 km ASC COUNT 10

推奨学習:

Redis ビデオ チュートリアル

以上がRedis の特別なデータ型 地理空間の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。