引言 在日常使用的有些APP中,想什麼微信,百度地圖,可以可以搜尋附近的人,距離自己多遠,以及在地圖上我們可以搜索附近的某個地點,距離自己的位置。針對這種類似的功能,我們可以通過redis就能實現。 redis在3.2版本之後也提供了地理位置的能力,使用redis可以輕鬆實現查找附近的人 一:附近的 ...
引言
在日常使用的有些APP中,想什麼微信,百度地圖,可以可以搜尋附近的人,距離自己多遠,以及在地圖上我們可以搜索附近的某個地點,距離自己的位置。針對這種類似的功能,我們可以通過redis就能實現。
redis在3.2版本之後也提供了地理位置的能力,使用redis可以輕鬆實現查找附近的人
一:附近的人(地)
1:geoadd命令
該命令是添加地理位置信息,基本格式是:
舉個例子:我現在要添加東合中心的地理位置,先定位出東合中心的經緯度坐標位置114.17135 30.51155,然後在redis中添加經緯度位置
geoadd position 114.17135 30.51155 dhzx
要註意的是,某歌地圖搜出來的坐標,緯度在前,經度在後,而redis命令是相反的
如果要一次添加多個位置,直接在後面追加經緯度和member即可,接下來我們添加 體育中心,長江大橋的經緯度位置
geoadd position 114.17701 30.51159 tyzx 114.29901 30.55315 cjdq
2:geodist命令
該命令是計算兩個位置的距離,我們已經添加了三個位置,接下來我們可以計算東合中心-長江大橋的兩地之間的距離
geodist position dhzx cjdq
預設單位是米,同時也支持其他單位:
- m:米
- km:公裡
- mi:英里
- ft:英尺
3:georadius命令
該命令是找出指定坐標點一定距離內的位置,基本格式是:
#獲取體育中心方圓1公裡內的地點 (有東合中心 、體育中心兩個)
後面可選參數主要是針對查詢結果做一些處理:
這些參數不一一演示,就演示WITHCOORD、WITJDIST、ASC
到這裡,相信你已經可以使用redis實現“查到附近的人”了
4:georadiusbymember命令
該命令同樣是找出距離指定位置n米距離內的點位,與georadius的區別是:
georadius是指定坐標點來搜索,而georadiusbymember是指定member來搜索,
5:geohash命令
該命令是計算某位置的hash值,基本格式如下:
6:geopos命令
獲取指定位置的坐標:
二:排行榜
排行榜的功能主要是基於redia的Zset進行實現的,ZSet數據結構類似於Set結構,只是ZSet結構中,在set基礎上加入了一個score欄位,通過利用score進行相關的排序。
每個元素都會有一個分值(score),然後所有元素按照分值的大小進行排列,相當於是一個進行了排序的鏈表。
http://www.javajun.net/posts/13563/index.html