Redis 的 Geo 命令来处理地理位置数据。Redis 的 Geo 命令集可以存储地理位置(经纬度)数据,并支持基于地理位置的操作,例如计算两点之间的距离、查找附近的地点等,非常适合用于实现地理位置相关的功能,比如地图定位、附近的商家等。
使用场景

  • 查找附近地点:如用户附近的商家、酒店、加油站等。
  • 计算距离:计算两个地点之间的距离。
  • 定位标记:保存多个地点的地理位置和信息。
    Redis Geo 基本命令和示例
    以下是 Redis Geo 命令的示例,包括存储地理位置数据、计算距离和查找附近地点等。
  1. 添加地理位置数据 - 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” # 王府井的经纬度

  1. 获取地点的经纬度 - GEOPOS
    使用 GEOPOS 可以获取存储的地点的经纬度。
    GEOPOS places “Tiananmen”

返回: [116.403963, 39.915119]

  1. 计算两个地点之间的距离 - GEODIST
    使用 GEODIST 命令计算两个地点之间的距离。可以指定单位:米(m)、千米(km)、英里(mi)、英尺(ft)。
    GEODIST places “Tiananmen” “ForbiddenCity” km

返回: 距离(千米),例如 0.6 表示 600 米左右

  1. 查找指定范围内的地点 - 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

  1. 查找某地点附近的地点 - GEORADIUSBYMEMBER
    使用 GEORADIUSBYMEMBER 命令可以指定一个存储的地点,并查找该地点周围一定范围内的其他地点。

查找 “Tiananmen” 附近 2 公里内的地点

GEORADIUSBYMEMBER places “Tiananmen” 2 km WITHDIST

返回: [ “Tiananmen”, “ForbiddenCity” ]

  1. 获取地点的 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 命令提供了强大的地理位置处理功能,非常适合用于实现地图服务、位置检索、距离计算等场景。通过简单的命令,你可以快速实现“附近的地点”查询等功能,适合社交平台、电子商务等应用场景。