引言
GEO是redis的高級數據結構。GEO存儲的元素是經度緯度和名字,是用來計算半徑範圍內有哪些之前已經存儲的值。
主要有以下命令
GEOADD
GEODIST
GEOHASH
GEOPOS
GEORADIUS
GEORADIUSBYMEMBER
挨個介紹
GEOADD
把一個或多個經緯度地址添加到key中。
已經存在的元素再次添加會被更新經緯度
geoadd key longitude latitude element [longitude latitude emelent …]
GEODIST
計算已經存儲的兩個值的距離,距離的單位可以是m、km、mi(英里)、ft(英尺)
geodist key member1 member2 [unit]
GEOHASH
獲取一個或多個地址的地理編碼字符串。
地點編碼字符串可以理解爲一個經緯度的唯一編碼。具體見https://en.wikipedia.org/wiki/Geohash
geohash key member[member …]
GEOPOS
獲取一個或多個地址的經緯度
geopos key member[member …]
GEORADIUS
獲取指定經緯度的半徑範圍內的元素,返回的元素內容可以包括距離,地理編碼和經緯度,也可限定個數
georadius longitude latitude radius m|km|mi|ft [WITHDIST] [WITHHASH] [WITHCOORD] [asc |desc] [count count]
GEORADIUSBYMEMBER
求某一元素半徑範圍的count個元素。 與georadius類型
georadiusbymember key member radius [withcoord] [withhash] [withdist] [asc|desc] [count count]
案例
這個特別適合用來計算兩個目標之間的距離。
一個目標範圍內的其他目標
比如微信的附近的人,就可以使用這種數據結構實現。
有一疑惑,添加的元素怎麼刪除呢?
其實geo命令是把元素存儲在zset結構中,可以使用zrem命令刪除元素。當然也可使用所有與zset相關的命令