除了Bitmaps和HyperLogLog,Redis还提供了关于地理空间的相关操作,主要是经纬度。Redis提供的地理信息操作是有误差的,最大误差可能会达到5%。Redis提供的Geo的操作如下:

  • geoadd

完整命令参数为geoadd key longitude latitude member [longitude latitude member ...]

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。下面的例子是把广州塔(113.324553,23.106414)和中山纪念堂(113.264692,23.13286)添加到guangzhou这个key中

127.0.0.1:6379> geoadd guangzhoudibiao 113.324553 23.106414 guangzhouta 113.264692 23.13286 zhongshanjiniantang

在线获取地点的经纬度可以到高德地图网站查看。

  • geopos

完整命令参数为geopos key member [member ...]

获取key中指定位置的经纬度。比如获取广州塔的经纬度

127.0.0.1:6379> geopos guangzhoudibiao guangzhouta
1) 1) "113.3245512843132019"
2) "23.10641289760576456"

也可以一次性指定多个位置

127.0.0.1:6379> geopos guangzhoudibiao guangzhouta zhongshanjiniantang
1) 1) "113.3245512843132019"
2) "23.10641289760576456"
2) 1) "113.26468974351882935"
2) "23.13286017818230533"

结果会以列表的形式显示,每个位置中的1)是经度,2)是维度。

  • geodist

完整命令参数为geodist key member1 member2 [unit]

返回地址member1和member2的距离,unit是单位,可以是下面几种

m:米

km:千米

mi:英里

ft:英尺

默认单位是米

比如看一下广州塔与中山纪念堂之间的距离

127.0.0.1:6379> geodist guangzhoudibiao guangzhouta zhongshanjiniantang km
"6.7934"

显示是6.79公里,注意这是直线距离,不是路线。有兴趣的可以在高德地图或者百度地图用测距的功能对比一下。

  • georadius

完整命令参数为georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

这个命令比较有意思,它返回的是以经纬度(longitude, latitude)为中心,radius为半径范围内key中符合的位置。其中m|km|ft|mi是半径的单位,含义和geodist相同。它有几个可选参数:

WITHCOORD:将位置的经纬度也一并返回

WITHDIST:将位置与中心的距离返回,单位与指定的半径的单位相同。

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

count:指定返回的个数,用法和MySQL的Limit类似。

ASC|DESC:默认情况下返回的数据不会排序,可以指定ASC升序或者DESC降序。这里的升序降序的排序规则是位置到中心点的距离。

以下的例子先多增加几个位置,然后计算某个地址的指定范围的其它位置

127.0.0.1:6379> geoadd guangzhoudibiao 113.264499 23.130061 guangzhoushizhengfu
(integer) 1
127.0.0.1:6379> geoadd guangzhoudibiao 113.326336 23.11475 guangdongbowuguan
(integer) 1
127.0.0.1:6379> geoadd guangzhoudibiao 113.298415 23.096714 zhongshandaxue
(integer) 1
127.0.0.1:6379> georadius guangzhoudibiao 113.264499 23.130061 5 km withdist
1) 1) "guangzhoushizhengfu"
2) "0.0003"
2) 1) "zhongshanjiniantang"
2) "0.3120"

上面的例子先增加了广州市政府、广东博物馆、中山大学3个位置,然后以广州市政府为中心,查找所有5km之内的位置,最后找到了自身和中山纪念堂。

我们使用的美团、大众点评等应用会在列表中的店显示与你当前距离,这种场景下用georadius 命令就很有用了,另外很多IM应用的附近的人也可以用这个命令来实现。

  • georadiusbymember

完整命令参数为georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

在上面的georadius你可能发现了一个问题,就是我们在实际使用的时候往往更加关心某个位置附近的其它位置,这里的位置是一个具体的地点,比如广州市政府,我们根本不关心广州市政府的经纬度是什么,所以这个命令是通过位置名称来查找的,它与georadius命令唯一的不同就是,它指定的是位置名称,而georadius指定的是经纬度

比如我们还是查找广州市政府附近5km的其它位置

127.0.0.1:6379> georadiusbymember guangzhoudibiao guangzhoushizhengfu 5 km withdist
1) 1) "guangzhoushizhengfu"
2) "0.0000"
2) 1) "zhongshanjiniantang"
2) "0.3119"

Redis系列(四):地理信息的更多相关文章

  1. Redis系列(四):Redis的复制机制(主从复制)

    本篇博客是Redis系列的第4篇,主要讲解下Redis的主从复制机制. 本系列的前3篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数据 ...

  2. Redis系列四之复制

    一.复制基本配置与演示 为了避免单点故障,Redis提供了复制功能,可以实现自动同步的过程. 1.配置 同步后的数据分为两类:一类是主数据库(master),一类是从数据库(slave).主数据库可以 ...

  3. Redis系列四:redis支持的数据类型

    一.字符串<String> 1. 字符串类型:实际上可以是字符串(包括XML JSON),还有数字(整形 浮点数),二进制(图片 音频 视频),最大不能超过512MB 2. 设值命令: s ...

  4. Redis系列四 Redis常见配置

    redis.conf常见配置 参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程  daemonize no2. ...

  5. Redis系列四 - 分布式锁的实现方式

    前言 分布式锁一般有3中实现方式: 数据库乐观锁: 基于Redis的分布式锁: 基于ZooKeeper的分布式锁. 以下将详细介绍如何正确地实现Redis分布式锁. 可靠性 首先,为了确保分布式锁的可 ...

  6. Redis系列(四)-低成本高可用方案设计

    关于Redis高可用方案,看到较多的是keepalived.zookeeper方案. keepalived是主备模式,意味着总有一台浪费着.zookeeper工作量成本偏高. 本文主要介绍下使用官方s ...

  7. Redis系列四(keepalived+lvs搭建负载均衡)

    1.安装Keepalived(主备服务器都要安装) 10.8.80.218  主服务器 10.8.80.217  备服务器 10.8.80.200  虚拟IP $ wget http://www.ke ...

  8. Redis系列(四)--持久化

    持久化就是将数据的更新异步的保存到磁盘中 持久化方式: 1.快照:某个时间点数据的备份 MySQL dump.Redis RDB 2.写日志:MySQL BinLog.HBASE Hlog.Redis ...

  9. Redis系列(五):Redis的过期键删除策略

    本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略. 本系列的前4篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数 ...

  10. Redis系列(六):设置/移除键的过期时间

    本篇博客是Redis系列的第6篇,主要讲解以下内容: 数据库数量 切换目标数据库 设置键的过期时间 移除键的过期时间 本系列的前5篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安 ...

随机推荐

  1. Django中的表单

    目录 表单 Django中的表单 用表单验证数据 自定义验证 表单 HTML中的表单是用来提交数据给服务器的,不管后台服务器用的是 Django  还是 PHP还是JSP还是其他语言.只要把 inpu ...

  2. 在进程空间使用虚拟内存(Windows 核心编程)

    虚拟内存空间 如今的 Windows 操作系统不仅可以运行多个应用程序,还可以让每一个应用程序享受到约 4 GB 的虚拟内存空间(包括系统占用),假如内存为 4 GB 的话.那为什么 Window 可 ...

  3. Windbg 字符串条件断点

    0x01 前言 Windbg 作为 Windows 下的主流调试器,除了人机交互相比其他调试器略有不足外,其他功能都是十分强大的存在. 在所有的调试器中断点功能都是必不可少的,Windbg 可以使用 ...

  4. XCTF-FlatScience

    FlatScience 题目描述 啥描述也没有 解题过程 页面有好多链接,除了论文pdf之外,还有子目录下的index.html, 比如:/1/index.html,/1/3/index.html 扫 ...

  5. layui中富文本编辑器LayEdit的使用

    html部分: <textarea id="demo" style="display: none;"></textarea>js部分:& ...

  6. JAVA连接、操作数据库的DBHelper

    工厂模式的DBHelper 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.Prepa ...

  7. 记一次 .NET 某医院HIS系统 CPU爆高分析

    一:背景 1. 讲故事 前几天有位朋友加 wx 抱怨他的程序在高峰期总是莫名其妙的cpu爆高,求助如何分析? 和这位朋友沟通下来,据说这问题困扰了他们几年,还请了微软的工程师过来解决,无疾而终,应该还 ...

  8. 逆向工程初步160个crackme-------6

    工具:1. 按钮事件地址转换器E2A 2. PEID 3. Ollydbg 同样我们先来运行一下这个程序, ok按钮是被禁用的,有一个help按钮点击后弹出一个消息框:消息框显示提示信息为.本程序需要 ...

  9. 【Mybatis源码解析】- 整体架构及原理

    整体架构 version-3.5.5 在深入了解Mybatis的源码之前,我们先了解一下Mybatis的整体架构和工作原理,这样有助于我们在阅读源码过程中了解思路和流程. 核心流程 在上一遍的入门程序 ...

  10. 解密华为云FusionInsight MRS新特性:一架构三湖

    摘要:华为云安全网关产品总监郭冕在"华为云TechWave云原生2.0专题日"上发表<华为云FusionInsight MRS,一个架构实现三种数据湖>的主题演讲,分享 ...