Redis实现附近的人

GEOADD


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 存储。

GEODIST


计算距离。

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”

GEOHASH


key member [member …]

返回一个或多个位置元素的 Geohash。保存到 Redis 中是用 Geohash 位置 52 点整数编码。

GeoHash 将二维经纬度转换成字符串。比如下图展示了北京 9 个区域的 GeoHash 字符串,分别是 WX4ER,WX4G2、WX4G3 等,每一个字符串代表了某一矩形区域。

即这个矩形区域内所有的点(经纬度坐标)都共享相同的 GeoHash 字符串,这样既可保护隐私(只表示大概区域位置而非具体点),又容易做缓存。

比如左上角区域内的用户不断发送位置信息请求餐馆数据,由于这些用户的 GeoHash 字符串都是 WX4ER,所以可把 WX4ER 当作 key,把该区域的餐馆信息当作 value 来进行缓存,而若不使用 GeoHash,由于区域内的用户传来的经纬度各不相同的,很难做缓存。字符串越长,表示的范围越精确。

GEOPOS


从key里返回所有给定位置元素的位置(经度和纬度)。

key member [member …]

返回zhangsan和lisi的位置信息

127.0.0.1:0>GEOPOS diner:location zhangsan lisi

    1. “121.44661813974380493”
  1. “31.20559220971455971”

    1. “121.44657522439956665”
  2. “31.20485207113603821”

GEORADIUS


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

    1. “wangwu”
  1.  1)    "121.44534140825271606"
    
  2. “31.20310057881493293”

    1. “lisi”
  3.  1)    "121.44657522439956665"
    
  4. “31.20485207113603821”

    1. “zhangsan”
  5.  1)    "121.44661813974380493"
    
  6. “31.20559220971455971”

    1. “zhangliu”
  7.  1)    "121.45106524229049683"
    
  8. “31.20906731242401833”

以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其距离(单位是米)

127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHDIST

    1. “wangwu”
  1. “302.6202”

    1. “lisi”
  2. “82.5066”

    1. “zhangsan”
  3. “0.1396”

    1. “zhangliu”
  4. “573.0651”

以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其距离(单位是米) 由近及远

47.110.246.98:15>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHDIST ASC

    1. “zhangsan”
  1. “0.1396”

    1. “lisi”
  2. “82.5066”

    1. “wangwu”
  3. “302.6202”

    1. “zhangliu”
  4. “573.0651”

以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其GeoHash值

127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHHASH

    1. “wangwu”
  1. “4054756135204337”

    1. “lisi”
  2. “4054756138536712”

    1. “zhangsan”
  3. “4054756138736536”

    1. “zhangliu”
  4. “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

    1. “zhangsan”
  1. “4054756138736536”

    1. “lisi”
  2. “4054756138536712”

GEORADIUSBYMEMBER


找出位于指定范围内的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值