LBS(Location Based Service),基於位置的服務。mysql
Redis 是最熱門的 nosql 數據庫之一,它的最大特色就是快。
因此在 LBS 這種須要大量寫入和查詢的應用場景中,用它來存儲用戶的地理位置信息最適合不過了。git
Redis 的 GEO 是 3.2 版本的新特性。這個功能能夠將用戶給定的地理位置信息儲存起來, 並對這些信息進行操做。redis
PS:關於三種nosql數據庫這裏我也作了調研,其中mongodb最大的特色是靈活,由於其數據是以json的格式存儲,因此字段隨時能夠增長或減小;Redis的特色是快,適合單一的,簡單的,大量數據的存儲;HBase我沒有作深刻研究,它的特色是大,適合作離線緩存。在處理社交這種關係複雜的數據存儲時,依然仍是須要用mysql這種關係型數據庫,nosql並不能徹底替代。sql
目前 redis 支持如下 6 個 GEO 的相關操做mongodb
GEOADD location-set longitude latitude member [longitude latitude member ...]
數據庫
示例json
redis> GEOADD Hangzhou 120.0919500000 30.3219600000 Xihu
緩存
GEOPOS key member [member ...]
nosql
示例code
redis> GEOPOS Hangzhou Sandun Xixi Xihu
GEODIST location-set location-x location-y [unit]
其中 unit 參數是距離單位,可選填
示例
redis> GEODIST Hangzhou Xihu Xixi m
這個功能頗有用,能夠用來查找周邊的點
GEORADIUS location-set longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]
其中:
radius表示範圍距離,距離單位是 m|km|ft|mi
可選參數:
示例
redis> GEORADIUS Hangzhou 120.0919500000 30.3219600000 10 km
GEORADIUSBYMEMBER key member radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]
和 GEORADIUS 同樣,只是傳入的是member名,不是座標了
redis> GEORADIUS Hangzhou Xihu 10 km