GEOADD key longitude latitude member [longitude latitude member …] 添加位置信息
添加单个位置
127.0.0.1:0>GEOADD diner:location 121.446617 31.205593 ‘zhangsan’
“1”
添加多个位置信息
127.0.0.1:0>GEOADD diner:location 121.4465774 31.20485103 ‘lisi’ 121.44534 31.2031 ‘wangwu’ 121.4510648 31.2090667 ‘zhangliu’
“3”
底层使用的 sortedSet 存储。
计算距离。
key member1 member2 [unit]
, 其中 unit 为单位 m|km|ft(英尺)|mi(英里)
计算两点间的距离,返回距离的单位是米(m)
127.0.0.1:0>GEODIST diner:location zhangsan lisi m
“82.4241”
计算两点间的距离,返回距离的单位是千米(km)
127.0.0.1:0>GEODIST diner:location zhangsan lisi km
“0.0824”
key member [member …]
返回一个或多个位置元素的 Geohash。保存到 Redis 中是用 Geohash 位置 52 点整数编码。
GeoHash 将二维经纬度转换成字符串。比如下图展示了北京 9 个区域的 GeoHash 字符串,分别是 WX4ER,WX4G2、WX4G3 等,每一个字符串代表了某一矩形区域。
即这个矩形区域内所有的点(经纬度坐标)都共享相同的 GeoHash 字符串,这样既可保护隐私(只表示大概区域位置而非具体点),又容易做缓存。
比如左上角区域内的用户不断发送位置信息请求餐馆数据,由于这些用户的 GeoHash 字符串都是 WX4ER,所以可把 WX4ER 当作 key,把该区域的餐馆信息当作 value 来进行缓存,而若不使用 GeoHash,由于区域内的用户传来的经纬度各不相同的,很难做缓存。字符串越长,表示的范围越精确。
从key里返回所有给定位置元素的位置(经度和纬度)。
key member [member …]
返回zhangsan和lisi的位置信息
127.0.0.1:0>GEOPOS diner:location zhangsan lisi
-
- “121.44661813974380493”
-
“31.20559220971455971”
-
- “121.44657522439956665”
-
“31.20485207113603821”
key longitude latitude radius m|km|ft|mi
[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
范围可以使用以下其中一个单位:
-
m 表示单位为米
-
km 表示单位为千米
-
mi 表示单位为英里
-
ft 表示单位为英尺
在给定以下可选项时, 命令会返回额外的信息:
-
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致
-
WITHCOORD: 将位置元素的经度和维度也一并返回
-
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
- ASC
根据中心的位置, 按照从近到远的方式返回位置元素。
- DESC
根据中心的位置, 按照从远到近的方式返回位置元素。
在默认情况下, GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT 选项去获取前 N 个匹配元素, 但是因为命令在内部可能会需要对所有被匹配的元素进行处理, 所以在对一个非常大的区域进行搜索时, 即使只使用 COUNT 选项去获取少量元素, 命令的执行速度也可能会非常慢。 但是从另一方面来说, 使用 COUNT 选项去减少需要返回的元素数量, 对于减少带宽来说仍然是非常有用的。
以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其位置
127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHCOORD
-
- “wangwu”
-
1) "121.44534140825271606"
-
“31.20310057881493293”
-
- “lisi”
-
1) "121.44657522439956665"
-
“31.20485207113603821”
-
- “zhangsan”
-
1) "121.44661813974380493"
-
“31.20559220971455971”
-
- “zhangliu”
-
1) "121.45106524229049683"
-
“31.20906731242401833”
以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其距离(单位是米)
127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHDIST
-
- “wangwu”
-
“302.6202”
-
- “lisi”
-
“82.5066”
-
- “zhangsan”
-
“0.1396”
-
- “zhangliu”
-
“573.0651”
以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其距离(单位是米) 由近及远
47.110.246.98:15>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHDIST ASC
-
- “zhangsan”
-
“0.1396”
-
- “lisi”
-
“82.5066”
-
- “wangwu”
-
“302.6202”
-
- “zhangliu”
-
“573.0651”
以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其GeoHash值
127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHHASH
-
- “wangwu”
-
“4054756135204337”
-
- “lisi”
-
“4054756138536712”
-
- “zhangsan”
-
“4054756138736536”
-
- “zhangliu”
-
“4054756186304127”
以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其GeoHash值去2个
127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHHASH COUNT 2
-
- “zhangsan”
-
“4054756138736536”
-
- “lisi”
-
“4054756138536712”
找出位于指定范围内的元素