0
点赞
收藏
分享

微信扫一扫

Redis特殊类型之Geospatial

1.概述

redis除了提供了五大基本数据类型String、List、Set、Hash、Zset,还有3个比较特殊的数据类型,Geospatial、Hyperloglog、Bitmap,这三个数据类型有一些比较有趣的应用场景,下面说说Geospatial,主要可以应用于跟地图相关的应用。

朋友的定位,附近的人,打车距离计算?

Redis 的 Geo 在Redis3.2 版本就推出了! 这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!

2.Geo命令:

  1. GEOADD:添加地理位置
  2. GEODIST:获取两人之间的距离
  3. GEOHASH:返回一个或多个位置元素的geohash表示
  4. GEOPOS:获取当前位置
  5. GEORADIUS:以给定的经纬度为中心,找出某一半径内的元素
  6. GEORADIUSBYMEMBER:找出位于指定元素周围的其他元素

3.geoadd:添加地理位置

3.1添加地理位置

  • geoadd key 经度 纬度 城市名称[多个添加,经纬度城市名称循环]
  • 两级(南极和北极)无法添加,一般通过程序导入
  • 添加北京位置

Redis特殊类型之Geospatial_地理位置

  • 添加河北和上海位置

Redis特殊类型之Geospatial_数据类型_02

3.2获取地理位置

  • geopos key value
  • 获取北京和上海的位置

Redis特殊类型之Geospatial_ci_03

3.3计算两个位置之间的距离(直线距离[笑哭,谁会查直线距离])

  • geodist key 位置1 位置2 [m|km|ft|mi](单位)
  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。
  • 计算河北和北京之间的距离,单位为千米

Redis特殊类型之Geospatial_ci_04

3.4以指定的经纬度为中心,找出某一半径内的元素

  • GEORADIUS key 维度 经度 半径长度 m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]
  • GEORADIUSBYMEMBER key 位置名称 .... 和上面的georadius一样 只不过是把经纬度换成了已存在的地理位置名称
  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。
  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
  • WITHCOORD: 将位置元素的经度和维度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
  • COUNT 限定返回的记录数。
  • ASC: 查找结果根据距离从近到远排序。
  • DESC: 查找结果根据从远到近排序。
  • 搜索经度110 维度30 附近1000km内的位置,或者2000米的位置
  • 可以用于做附近的人,比如附近100m内的玩家XXX,感觉王者是不是这么做

Redis特殊类型之Geospatial_ci_05

3.5返回一个或多个地理位置的11位的哈希值(一般用不到)

  • geohash key value[value循环,多个空格拆分]

Redis特殊类型之Geospatial_数据类型_06

3.6其他命令,底层是用Zset实现的,可以用zset的删除和查看等命令

  • 查看

Redis特殊类型之Geospatial_数据类型_07

  • 删除

Redis特殊类型之Geospatial_ci_08

  • .......

4使用场景

  • 计算两地之间的直线距离
  • 存储地理位置
  • 实现位置的附近人功能

127.0.0.1:6379> zrange china:city 0 -1  #查看所有元素
1) "chongqin"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"
127.0.0.1:6379> zrem china:city beijing  #移除指定元素
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqin"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"

举报

相关推荐

0 条评论