使用redis查詢附近的人

微信之前有個功能墓塌,叫附近的人,可以搜索自己的微信用戶奥额。出門掃碼買奶茶時苫幢,如果使用手機支付,可以很快速的定位到距離最近的一家店披坏,然后方便的完成下單态坦、支付。這些技術的背后棒拂,是使用經緯度坐標來定位位置伞梯,以某個點為圓心,搜索指定半徑圓周內其他的位置點來實現(xiàn)的帚屉。
雖然可以大致明白背后的邏輯谜诫,但是要想自己實現(xiàn)相應的功能,還是有一定難度的攻旦,還好redis已經為我們提供了這種能力喻旷。

Redis的GEO數據類型

Redis3.2版本之后,增加了GEO數據類型牢屋,用于存儲和查詢地理位置且预。

對GEO的操作命令槽袄,主要為以下6個:

  • geoadd:添加地理位置(支持多個)
geoadd key longitude latitude member [longitude latitude member ...]
  • geopos:查詢地理位置的坐標(支持多個)
geopos key member [member ...]
  • geodist:計算兩點之間的距離
geodist key member1 member2 [unit]
  • georadius:查詢某位置內其他成員信息
georadius key longitude latitude radius m|
  • geohash:查詢某個或多個位置的hash值
geohash key member [member ...]
  • zrem:刪除某個或多個位置
zrem key member [member ...]

操作實戰(zhàn)示例:

// 添加多個位置
127.0.0.1:6379[9]> geoadd address 117.128531 31.828228 chuangxinyuan 117.129016 31.825252 shenggu 117.175853 31.908925 kexuedao 117.14373 31.839379 chanyeyuan
(integer) 4

// 查詢創(chuàng)新院位置
127.0.0.1:6379[9]> geopos address chuangxinyuan
1) 1) "117.12852984666824341"
    2) "31.82822871945806043"

// 計算創(chuàng)新院和科學島的距離
127.0.0.1:6379[9]> geodist address chuangxinyuan kexuedao
"10027.0847"

// 計算創(chuàng)新院和科學島的距離,以km為單位
127.0.0.1:6379[9]> geodist address chuangxinyuan kexuedao km
"10.0271"

// 查詢以創(chuàng)新院為圓心锋谐,半徑15公里內所有位置(117.128531 31.828228是創(chuàng)新院的經緯度)
127.0.0.1:6379[9]> georadius address 117.128531 31.828228 15 km 
1) "shenggu"
2) "chuangxinyuan"
3) "chanyeyuan"
4) "kexuedao"

// 查詢創(chuàng)新院為圓心遍尺,半徑15公里內的所有位置,查出位置的經緯度坐標涮拗,距離圓心的公里數
127.0.0.1:6379[9]> georadius address 117.128531 31.828228 15 km  WITHCOORD WITHDIST
1) 1) "shenggu"
   2) "0.3341"
   3) 1) "117.12901800870895386"
      2) "31.82525295681698907"
2) 1) "chuangxinyuan"
   2) "0.0001"
   3) 1) "117.12852984666824341"
      2) "31.82822871945806043"
3) 1) "chanyeyuan"
   2) "1.8978"
   3) 1) "117.14373260736465454"
      2) "31.83937895783798666"
4) 1) "kexuedao"
   2) "10.0271"
   3) 1) "117.17585474252700806"
      2) "31.90892410228676823"

// 查詢創(chuàng)新院為圓心乾戏,半徑15公里內的所有位置,查出位置的經緯度坐標三热,距離圓心的公里數鼓择,按距離排序取前兩個
127.0.0.1:6379[9]> georadius address 117.128531 31.828228 15 km  WITHCOORD WITHDIST COUNT 2 ASC
1) 1) "chuangxinyuan"
   2) "0.0001"
   3) 1) "117.12852984666824341"
      2) "31.82822871945806043"
2) 1) "shenggu"
   2) "0.3341"
   3) 1) "117.12901800870895386"
      2) "31.82525295681698907"

// 查詢聲谷的hash值
127.0.0.1:6379[9]> geohash address shenggu
1) "wtem13dexc0"

// 刪除聲谷的位置
127.0.0.1:6379[9]> zrem address shenggu
(integer) 1

應用場景

-可以查詢附近的人,可以查詢附件的店鋪
-可以計算兩點之間的直線距離(異地戀可以試一下)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末就漾,一起剝皮案震驚了整個濱河市呐能,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抑堡,老刑警劉巖催跪,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異夷野,居然都是意外死亡懊蒸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門悯搔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骑丸,“玉大人,你說我怎么就攤上這事妒貌⊥ㄎ#” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵灌曙,是天一觀的道長菊碟。 經常有香客問我,道長在刺,這世上最難降的妖魔是什么逆害? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蚣驼,結果婚禮上魄幕,老公的妹妹穿的比我還像新娘。我一直安慰自己颖杏,他們只是感情好纯陨,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般翼抠。 火紅的嫁衣襯著肌膚如雪咙轩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天阴颖,我揣著相機與錄音臭墨,去河邊找鬼。 笑死膘盖,一個胖子當著我的面吹牛,可吹牛的內容都是我干的尤误。 我是一名探鬼主播侠畔,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼损晤!你這毒婦竟也來了软棺?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尤勋,失蹤者是張志新(化名)和其女友劉穎喘落,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體最冰,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡瘦棋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了暖哨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赌朋。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖篇裁,靈堂內的尸體忽然破棺而出沛慢,到底是詐尸還是另有隱情,我是刑警寧澤达布,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布团甲,位于F島的核電站,受9級特大地震影響黍聂,放射性物質發(fā)生泄漏躺苦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一产还、第九天 我趴在偏房一處隱蔽的房頂上張望圾另。 院中可真熱鬧,春花似錦雕沉、人聲如沸集乔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扰路。三九已至尤溜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汗唱,已是汗流浹背宫莱。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哩罪,地道東北人授霸。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像际插,于是被迫代替她去往敵國和親碘耳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容