前面我們已經把五大數據類型講完了,今天我開始講redis特殊數據類型Geospatial,地理位置的存儲,這個是數據類型可以實現朋友定位,兩個地方之間的距離,搜索附近的人等。具體操作就是將指定的地理空間位置(緯度、經度、名稱)添加到指定的key中,這些數據將會存儲到sorted set然後使用GEORADIUS或者GEORADIUSBYMEMBER命令對數據進行半徑查詢計算出範圍內的元素和元素之間的距離。
Geospatial數據類型只有六個命令
添加元素
Geoadd [key] [經度] [緯度] [元素]
操作這個命令之前我們需要去網上查找一些城市的經緯度坐標,因為經度和緯度是有範圍限制的,如果隨便添加有可能會報錯,官網顯示說明
· 有效的經度從-180度到180度。
· 有效的緯度從-85.05112878度到85.05112878度
所以添加的值不能超過這個範圍,網上找了北京、上海、廣州、深圳、杭州、南京的經緯度進行添加數據。
這裡我們只是測試當然是手動添加,實際中我們可以是程序進行批量添加城市位置信息。
取值
Geopos [key] [元素]:獲取指定元素的經度緯度
獲取兩地之間的距離
Geodist [key] [元素1] [元素2]:獲取元素1和元素2之間的距離
單位:
m:表示單位米
km:表示單位千米
Redis會根據兩個經緯度的值進行計算得出兩個地點間的距離。
獲取某個元素附近的元素
以給定元素為原點,找出半徑內的所有元素,這個功能是不是可以實現我們搜索附近的人,假如我當前位置經度緯度為 110 30 現在要找出記錄這個點周圍1000km內的城市
GEORADIUS [key] [當前位置經度] [當前位置緯度] [查找的範圍]
找查附近的城市並顯示與城市的距離,在原命令上增加 withdist參數
找查附近的城市並顯示附近城市的經緯度,在原命令上增加 withcoord參數
查找指定個數的附近的城市,在原命令上增加 count參數
查找某個元素周圍的元素
上面時通過我自定義的經緯度經查找,還可以換一種方式,以某個存在redis中的元素,查找這個元素附件的元素。
其實redis GEO底層原理是通過zsets實現的,所以一些zset命令也都可以使用,例如
查找key中的所有元素
------------------------------------------------END-----------------------------------------------------------------
你的一個讚一個關注是我創作的動力,是我持續輸出的能量源泉,老鐵關注一波吧!