redis-geo
Redis 的 Geo 命令来处理地理位置数据。Redis 的 Geo 命令集可以存储地理位置(经纬度)数据,并支持基于地理位置的操作,例如计算两点之间的距离、查找附近的地点等,非常适合用于实现地理位置相关的功能,比如地图定位、附近的商家等。
使用场景
- 查找附近地点:如用户附近的商家、酒店、加油站等。
- 计算距离:计算两个地点之间的距离。
- 定位标记:保存多个地点的地理位置和信息。
Redis Geo 基本命令和示例
以下是 Redis Geo 命令的示例,包括存储地理位置数据、计算距离和查找附近地点等。
- 添加地理位置数据 - GEOADD
使用 GEOADD 命令将地点的经纬度数据添加到 Redis 中。
将多个地点添加到 “places” 键下
GEOADD places 116.403963 39.915119 “Tiananmen” # 天安门的经纬度
GEOADD places 116.397128 39.916527 “ForbiddenCity” # 故宫的经纬度
GEOADD places 116.414117 39.906647 “Wangfujing” # 王府井的经纬度
- 获取地点的经纬度 - GEOPOS
使用 GEOPOS 可以获取存储的地点的经纬度。
GEOPOS places “Tiananmen”
返回: [116.403963, 39.915119]
- 计算两个地点之间的距离 - GEODIST
使用 GEODIST 命令计算两个地点之间的距离。可以指定单位:米(m)、千米(km)、英里(mi)、英尺(ft)。
GEODIST places “Tiananmen” “ForbiddenCity” km
返回: 距离(千米),例如 0.6 表示 600 米左右
- 查找指定范围内的地点 - GEORADIUS
使用 GEORADIUS 命令查找某个点一定范围内的所有地点。这非常适合实现“查找附近的商家”功能。
查找天安门 2 公里范围内的所有地点
GEORADIUS places 116.403963 39.915119 2 km
返回: [ “Tiananmen”, “ForbiddenCity” ]
可以使用 WITHDIST、WITHCOORD 等参数来显示额外信息:
GEORADIUS places 116.403963 39.915119 2 km WITHDIST WITHCOORD
- 查找某地点附近的地点 - GEORADIUSBYMEMBER
使用 GEORADIUSBYMEMBER 命令可以指定一个存储的地点,并查找该地点周围一定范围内的其他地点。
查找 “Tiananmen” 附近 2 公里内的地点
GEORADIUSBYMEMBER places “Tiananmen” 2 km WITHDIST
返回: [ “Tiananmen”, “ForbiddenCity” ]
- 获取地点的 GeoHash 值 - GEOHASH
GeoHash 是一种将地理位置编码为字符串的方法。可以使用 GEOHASH 获取存储的地点的 GeoHash 值。
GEOHASH places “Tiananmen”
返回: [“wx4g09x7z”]
实战场景示例
假设我们有一个商家的位置信息,用户可以查找附近的商家:
1.商家位置添加
:
GEOADD stores 116.4015 39.9123 “Store_A”
GEOADD stores 116.4058 39.9163 “Store_B”
GEOADD stores 116.4123 39.9072 “Store_C”
2.查找用户附近的商家
:
假设用户位置为 116.4039(经度)、39.9151(纬度),查找 1 公里范围内的商家:
GEORADIUS stores 116.4039 39.9151 1 km WITHDIST
3.计算两个商家之间的距离
:
计算 Store_A 和 Store_B 之间的距离:
GEODIST stores “Store_A” “Store_B” km
总结
Redis Geo 命令提供了强大的地理位置处理功能,非常适合用于实现地图服务、位置检索、距离计算等场景。通过简单的命令,你可以快速实现“附近的地点”查询等功能,适合社交平台、电子商务等应用场景。