除了五中基本的数据类型外,Redis还支持两种特殊的数据类型,第一种 Geo (地理位置):用于存储地理位置相关的数据,例如经纬度、距离等。第二种 Stream (流):是一个高级的列表类型,支持对列表的批量操作,如添加多个元素、获取多个元素等。
Redis GEO(Geo Redis)是一个用于存储和操作地理空间数据的 Redis 模块。它提供了一组命令,可以将地理位置数据存储为 Redis 键值,并支持各种地理位置查询和操作。
Redis GEO 可以在需要处理地理位置数据的场景中使用,例如近邻查询、地理位置路由、基于地理位置的服务等。使用 Redis GEO 可以高效地处理大量的地理位置数据,并且可以与其他 Redis 数据类型(例如列表、哈希表)结合使用,以提供更复杂的地理位置服务。
Redis GEO 的常用命令:
说明:
geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中
语法:
GEOADD key longitude latitude member [longitude latitude member ...]
示例:
127.0.0.1:6379> GEOADD city 116.403039 39.915351 "beijing" 117.220164 39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEODIST city beijing tianjin
"115025.3461"
127.0.0.1:6379> GEORADIUS city 116 39 1000 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUS city 116 39 200 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUS city 116 39 120 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUS city 116 39 100 km
(empty list or set)
127.0.0.1:6379>
该命令(GEOADD city 116.403039 39.915351 "beijing" 117.220164 39.095583 "tianjin")将beijing和tianjin这两个点添加到city 这个键值下,每个点都由它们的经纬度坐标和成员属性"beijing"和"tianjin"组成。
说明:
GEOPOS命令用于获取一个或多个点的经纬度坐标。
语法:
GEOPOS key member [member ...]
示例:
127.0.0.1:6379> GEOPOS city beijing tianjin nonexistent
1) 1) "116.40304058790206909"
2) "39.91535036301187489"
2) 1) "117.22016483545303345"
2) "39.09558351926427378"
3) (nil)
127.0.0.1:6379>
该命令将返回beijing 和 tianjin这两个点的经纬度坐标。
说明:
GEODIST命令用于计算两个给定位置之间的距离,以双精度浮点数的形式返回。
语法:
GEODIST key member1 member2 [unit]
示例:
127.0.0.1:6379> GEODIST city beijing tianjin
"115025.3461"
127.0.0.1:6379> GEODIST city beijing tianjin m
"115025.3461"
127.0.0.1:6379> GEODIST city beijing tianjin km
"115.0253"
127.0.0.1:6379> GEODIST city beijing tianjin mi
"71.4736"
127.0.0.1:6379> GEODIST city beijing tianjin ft
"377379.7446"
127.0.0.1:6379>
该命令将返回beijing 和 tianjin这两个点之间的距离,默认单位为米。
说明:
Redis GEO 使用 GEOHASH 来保存地理位置的坐标。GEOHASH 用于获取一个或多个位置元素的 GEOHASH 值。
语法:
GEOHASH key member [member ...]
示例:
127.0.0.1:6379> GEOHASH city beijing tianjin
1) "wx4g0f65g20"
2) "wwgq7mjh7b0"
127.0.0.1:6379>
该命令将返回北京和天津这两个点之间的距离。请注意,您需要提供正确的地理位置信息才能正确使用此命令。
说明:
根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
语法:
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC
示例:
127.0.0.1:6379> GEOADD city 116.403039 39.915351 "beijing" 117.220164 39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHDIST
1) 1) "tianjin"
2) "21.7878"
2) 1) "beijing"
2) "113.9887"
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHCOORD
1) 1) "tianjin"
2) 1) "117.22016483545303345"
2) "39.09558351926427378"
2) 1) "beijing"
2) 1) "116.40304058790206909"
2) "39.91535036301187489"
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHDIST WITHCOORD
1) 1) "tianjin"
2) "21.7878"
3) 1) "117.22016483545303345"
2) "39.09558351926427378"
2) 1) "beijing"
2) "113.9887"
3) 1) "116.40304058790206909"
2) "39.91535036301187489"
说明:
GEORADIUSBYMEMBER命令用于计算给定成员属性在指定半径范围内的其他点的距离和坐标。
语法:
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES
示例:
127.0.0.1:6379> GEOADD city 116.403039 39.915351 "beijing" 117.220164 39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEORADIUS city 116.403039 39.915351 500 km WITHDIST COUNT 10 ASC
1) 1) "beijing"
2) "0.0002"
2) 1) "tianjin"
2) "115.0255"
举例:如命令(GEORADIUS city 116.403039 39.915351 500 km WITHDIST COUNT 10 ASC)根据GEORADIUS命令,计算距离北京市中心(经度116.403039,纬度39.915351)200千米范围内其他点的距离,并按照距离升序排列返回最接近的10个点及其距离。
该命令将返回距离北京市中心(经度116.403039,纬度39.915351)200千米范围内的其他点,并按照距离升序排列返回最接近的10个点及其距离。