🎯前言
除了五中基本的数据类型外,Redis还支持两种特殊的数据类型,第一种 Geo (地理位置):用于存储地理位置相关的数据,例如经纬度、距离等。第二种 Stream (流):是一个高级的列表类型,支持对列表的批量操作,如添加多个元素、获取多个元素等。
Redis GEO(Geo Redis)是一个用于存储和操作地理空间数据的 Redis 模块。它提供了一组命令,可以将地理位置数据存储为 Redis 键值,并支持各种地理位置查询和操作。
Redis GEO 可以在需要处理地理位置数据的场景中使用,例如近邻查询、地理位置路由、基于地理位置的服务等。使用 Redis GEO 可以高效地处理大量的地理位置数据,并且可以与其他 Redis 数据类型(例如列表、哈希表)结合使用,以提供更复杂的地理位置服务。
🎯Geo (地理位置 关命令介绍)
Redis GEO 的常用命令:
- GEODEL:删除给定位置上的元素。
- GEOADD:向给定位置添加元素。
- GEOPOS:获取给定元素的经纬度。
- GEORADIUS:半径为 radius 的圆中第一个元素。
- GEORADIUSBYMEMBER:在距离给定元素 radius 距离的圆中查找元素。
- GEOHASH:获取给定元素的哈希值。
- GEODIST:获取两个元素之间的距离。
🎯Geo (地理位置 相关命令操作)
GEOADD (添加地理位置的坐标)
说明:
geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中
语法:
GEOADD key longitude latitude member [longitude latitude member ...]
- key:要添加点的键值。
- 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命令用于获取一个或多个点的经纬度坐标。
语法:
GEOPOS key member [member ...]
- key:要获取点的键值。
- 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命令用于计算两个给定位置之间的距离,以双精度浮点数的形式返回。
语法:
GEODIST key member1 member2 [unit]
- key:可以是一个键值,但该参数不是必需的。
- member1:要计算距离的位置1的成员属性。
- member2:要计算距离的位置2的成员属性。
- unit:可以指定返回的距离单位,可以是m(米)、km(千米)、mi(英里)或ft(英尺)。
示例:
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这两个点之间的距离,默认单位为米。
GEOHASH (返回一个或多个位置对象的 geohash 值)
说明:
Redis GEO 使用 GEOHASH 来保存地理位置的坐标。GEOHASH 用于获取一个或多个位置元素的 GEOHASH 值。
语法:
GEOHASH key member [member ...]
- key:可以是一个键值,但该参数不是必需的。
- member1:要计算距离的位置1的成员属性。
- member2:要计算距离的位置2的成员属性。
示例:
127.0.0.1:6379> GEOHASH city beijing tianjin
1) "wx4g0f65g20"
2) "wwgq7mjh7b0"
127.0.0.1:6379>
该命令将返回北京和天津这两个点之间的距离。请注意,您需要提供正确的地理位置信息才能正确使用此命令。
GEORADIUS (根据用户给定的经纬度坐标来获取指定范围内的地理位置集合)
说明:
根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
语法:
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC
- key:要查找的点的键值。
- longitude:要查找的点的经度。
- latitude:要查找的点的纬度。
- radius:可以设置半径的大小,后面需要指定单位,如m、km、ft或mi。
- [WITHCOORD]:如果需要,可以使用WITHCOORD选项来返回包含距离计算的点的经纬度坐标。
- [WITHDIST]:如果需要,可以使用WITHDIST选项来返回包含距离计算的点的距离。
- [WITHHASH]:如果需要,可以使用WITHHASH选项来返回包含距离计算的点的哈希值。
- [COUNT count]:如果需要,可以使用COUNT count选项来指定返回的距离计算的点的数量。
- [ASC]:如果需要,可以使用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 (在距离给定元素 radius 距离的圆中查找元素)
说明:
GEORADIUSBYMEMBER命令用于计算给定成员属性在指定半径范围内的其他点的距离和坐标。
语法:
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES
- key:要查找的点的键值。
- member:要查找的点的成员属性。
- radius:可以设置半径的大小,后面需要指定单位,如m、km、ft或mi。
- [WITHCOORD]:如果需要,可以使用WITHCOORD选项来返回包含距离计算的点的经纬度坐标。
- [WITHDIST]:如果需要,可以使用WITHDIST选项来返回包含距离计算的点的距离。
- [WITHHASH]:如果需要,可以使用WITHHASH选项来返回包含距离计算的点的哈希值。
- [COUNT count]:如果需要,可以使用COUNT count选项来指定返回的距离计算的点的数量。
- [ASC|DES:如果需要,可以使用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个点及其距离。
GEORADIUS 和 GEORADIUS 区别
- GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
- GEORADIUS 和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUS 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点。