溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis特殊數據類型之Geospatial怎么應用

發布時間:2022-10-12 16:33:05 來源:億速云 閱讀:143 作者:iii 欄目:關系型數據庫

今天小編給大家分享一下Redis特殊數據類型之Geospatial怎么應用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

概述簡介

Redis Geospatial 是 Redis 3.2 版本新增的數據類型,主要用于存儲地理位置信息,并對存儲的信息進行操作。

在日常生活中,我們越來越依賴搜索 “附近的餐館”、在打車軟件上叫車,這些都離不開基于位置信息服務(Location-Based Service,LBS)的應用。LBS 應用訪問的數據是和人或物關聯的一組經緯度信息,而且要能查詢相鄰的經緯度范圍,GEO 就非常適合應用在 LBS 服務的場景中。

內部實現

GEO 本身并沒有設計新的底層數據結構,而是直接使用了 Sorted Set 集合類型。

GEO 類型使用 GeoHash 編碼方法實現了經緯度到 Sorted Set 中元素權重分數的轉換,這其中的兩個關鍵機制就是「對二維地圖做區間劃分」和「對區間進行編碼」。一組經緯度落在某個區間后,就用區間的編碼值來表示,并把編碼值作為 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]

應用場景

滴滴叫車

這里以滴滴叫車的場景為例,介紹下具體如何使用 GEO 命令:GEOADD 和 GEORADIUS 這兩個命令。

假設車輛 ID 是 33,經緯度位置是(116.034579,39.030452),我們可以用一個 GEO 集合保存所有車輛的經緯度,集合 key 是 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特殊數據類型之Geospatial怎么應用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女