为你自己学Redis
  • README
  • 安装
    • macos下安装redis
  • 第1章 构建Redis开发环境
    • 1.1 Redis概述
    • 1.2 了解必要的Docker技能
    • 1.3 安装和配置基于Docker的Redis环境
  • 第2章 实践Redis的基本数据类型
    • 2.1 Redis缓存初体验
    • 2.2 针对字符串的命令
    • 2.3 针对哈希类型变量的命令
    • 2.4 针对列表类型变量的命令
    • 2.5 针对集合的命令
    • 2.6 针对有序集合的命令
  • 第3章 实践Redis的常用命令
    • 3.1 键操作命令
    • 3.2 HyperLogLog相关命令
    • 3.3 lua脚本相关命令
    • 3.4 排序相关命令
  • 第4章 实践Redis服务器和客户端的操作
    • 4.1 Redis服务器管理客户端的命令
    • 4.2 查看Redis服务器的详细信息
    • 4.3 查看并修改服务器的常用配置
    • 4.4 多个客户端连接远端服务器
  • 第5章 Redis数据库操作实战
    • 5.1 切换数据库操作
    • 5.2 Redis事务操作
    • 5.3 地理位置相关操作
    • 5.4 位图数据类型的应用
    • 5.5 慢查询实战分析
  • 第6章 Redis数据持久化操作
    • 6.1 Redis持久化机制概述
    • 6.2 AOF持久化机制实战
    • 6.3 RDB持久化机制实战
    • 6.4 如何选用持久化方式
  • 第7章 搭建Redis集群
    • 7.1 搭建基于主从复制模式的集群
    • 7.2 搭建哨兵模式的集群
    • 7.3 搭建cluster集群
  • 第8章 GO整合MySQL与Redis
    • 8.1 GO通过redigo读写Redis
    • 8.2 Go与各种Redis数据类型
    • 8.3 Redis与MySQL的整合
    • 8.4 Redis缓存实战分析
  • 第9章 Redis应用场景与案例实现
    • 9.1 Redis消息队列实战
    • 9.2 Go实战Redis分布式锁
Powered by GitBook
On this page
  • 5.3.1 用GEOADD命令存储地理位置
  • 5.3.2 获取地理位置的经纬度信息
  • 5.3.3 查询指定范围内的地理信息
  • 5.3.4 查询地理位置间的距离
  1. 第5章 Redis数据库操作实战

5.3 地理位置相关操作

5.3.1 用GEOADD命令存储地理位置

  • GEOADD

    • 语法:GEOADD key longitute latitude member [longitute latitude member ...].其中:

      • longitute:经度

      • latitude:纬度

      • member:位置名称

    • 功能:存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的key中.添加成功返回1,失败则返回错误信息

例:添加地理位置:

127.0.0.1:6379> GEOADD pos 120.52 30.40 pos1
(integer) 1
127.0.0.1:6379> GEOADD pos 120.52 31.53 pos2
(integer) 1
127.0.0.1:6379> GEOADD pos 120.12 30.40 pos3
(integer) 1
127.0.0.1:6379> GEOADD pos 120.12 31.53 pos4
(integer) 1

可以看到,4个地理位置的键均为pos,但是这4个地理位置的别名不同.

例:添加地理位置失败:

127.0.0.1:6379> GEOADD errPos 1221.12 311.53 errPos
(error) ERR invalid longitude,latitude pair 1221.120000,311.530000

在Redis的GEO数据结构中,经纬度的上下限是基于WGS-84地理坐标系统的.具体限制如下:

  • Longitude(经度):-180°到180°

  • Latitude(纬度):-85.05112878°到85.05112878°

纬度的上下限并不是完全的-90°到90°,是因为这样可以确保地球的形状在某些投影下仍然为正方形.这个特定的纬度约为±85.0511°是Web墨卡托投影的一个特点,这种投影经常被用于地图服务,例如Google Maps.

5.3.2 获取地理位置的经纬度信息

  • GEOPOS

    • 语法:GEOPOS key member [member ...]

    • 功能:从给定的key里返回所有指定名称(member)的位置(经度和纬度),不存在的返回nil

例:查询地理位置数据

127.0.0.1:6379> GEOPOS pos pos1
1) 1) "120.52000075578689575"
   2) "30.39999952668997452"
127.0.0.1:6379> GEOPOS pos pos4
1) 1) "120.11999756097793579"
   2) "31.53000103201371473"
127.0.0.1:6379> GEOPOS pos notExist
1) (nil)
127.0.0.1:6379> GEOPOS notExist notExist
1) (nil)

5.3.3 查询指定范围内的地理信息

  • GEORADIUS

    • 语法:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key].其中:

      • longitude/latitude:指定待查询地理信息的中心点

      • radius:半径.

        • m:米

        • km:千米

        • ft:英尺

        • mi:英里

      • WITHCOORD:将位置元素的经度和纬度也一并返回

      • WITHDIST:在返回位置元素的同时,将位置元素与中心点之间的距离也一并返回

      • WITHHASH:以52位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值.这个选项主要用于底层应用或者调试,实际中的作用并不大

      • ASC/DESC:查找结果根据距离从近到远/从远到近排序

    • 功能:以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素

例:查询pos中距给定中心点距离不超过200km的位置元素的经纬度信息和距给定中心点的距离,按位置元素距中心点从远到近排序

127.0.0.1:6379> GEORADIUS pos 120.52 30.40 200 km WITHCOORD WITHDIST DESC
1) 1) "pos4"
   2) "131.3478"
   3) 1) "120.11999756097793579"
      2) "31.53000103201371473"
2) 1) "pos2"
   2) "125.6858"
   3) 1) "120.52000075578689575"
      2) "31.53000103201371473"
3) 1) "pos3"
   2) "38.3739"
   3) 1) "120.11999756097793579"
      2) "30.39999952668997452"
4) 1) "pos1"
   2) "0.0001"
   3) 1) "120.52000075578689575"
      2) "30.39999952668997452"
  • GEORADIUSBYMEMBER

    • 语法:GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

    • 功能:和GEORADIUS命令一样,都可以找出位于指定范围内的元素.但是GEORADIUSBYMEMBER命令的中心点是由给定的位置元素决定的,而不是使用经度和纬度来决定中心点

例:查询pos中距离位置元素pos1距离不超过200km的位置元素的经纬度信息和距给定中心点的距离,按位置元素距中心点从远到近排序

127.0.0.1:6379> GEORADIUSBYMEMBER pos pos1 200 km WITHCOORD WITHDIST DESC
1) 1) "pos4"
   2) "131.3479"
   3) 1) "120.11999756097793579"
      2) "31.53000103201371473"
2) 1) "pos2"
   2) "125.6859"
   3) 1) "120.52000075578689575"
      2) "31.53000103201371473"
3) 1) "pos3"
   2) "38.3740"
   3) 1) "120.11999756097793579"
      2) "30.39999952668997452"
4) 1) "pos1"
   2) "0.0000"
   3) 1) "120.52000075578689575"
      2) "30.39999952668997452"

5.3.4 查询地理位置间的距离

  • GEODIST

    • 语法:GEODIST key member1 member2 [m|km|ft|mi]

    • 返回两个给定位置之间的距离.距离单位默认为米.若待计算的地理位置不存在,则返回nil

例:计算位置元素pos1到pos2之间间隔的千米数:

127.0.0.1:6379> GEODIST pos pos1 pos2 km
"125.6859"

例:待计算的地理位置不存在的情况

127.0.0.1:6379> GEODIST pos pos1 notExist
(nil)
Previous5.2 Redis事务操作Next5.4 位图数据类型的应用

Last updated 1 year ago