美文网首页
Redis Geo数据结构

Redis Geo数据结构

作者: 代码的搬运工 | 来源:发表于2020-02-19 14:20 被阅读0次

1、Geo指令的基本用法

Redis提供的Geo指令只有6个,读者们瞬间就可以掌握。使用时,读者务必想到,它只是一个普通的zset结构。下面的例子将使用下图的5个公司的地理位置。

(一)增加

geoadd指令携带集合名称以及多个经纬度名称三元组,注意这里可以加入多个三元组。

也许你会为为什么Redis没有提供Geo元素删除指令?前面我们提到Geo存储结构上使用的是zset,意味这我们可以使用zset相关的指令来操作Geo数据,所以元素删除指令可以直接使用zrem指令即可。

(二)距离

geodist指令可以用来计算两个元素之前的距离,携带集合名称、两个名称和距离单位。

我们可以看到掘金离美团最近,因为它们都在望京。距离单位可以是m、km、ml和ft,分别代表米、千米、英里和尺。

(三)获取元素位置

geopos指令可以获取集合中任意元素的经纬度坐标,可以一次获取多个。

我们观察到获取的经纬度坐标和geoadd进去的坐标有少许误差,原因是GeoHash对二维坐标进行的一维映射是有损的,通过映射再还原回来的值会出现较小的差别。对于“附近的人”这种功能来说,这点儿误差完全可以接受。

(四)获取元素的hash值

GeoHash可以获取元素的经纬度编码字符串,你可以使用这个编码值去http://geohash.org/${hash}上进行直接定位,它是GeoHash的标准编码值。

(五)附近的公司

georadiusbymember指令是最为关键的指令之一,它可以用来查询指定元素附近的其他元素,它的参数非常复杂。

除了georadiusbymember指令根据元素查询附近的元素,Redis还提供了根据坐标值来查询附近的元素的指令georadius,这个指令更加有用,它可以根据用户的定位来计算“附近的车”“附近的餐馆”等。它的参数和georadiusbymember基本一致,唯一的差别是将目标元素改成经纬度坐标值。

2、注意事项

在一个地图应用中,车的数据、餐馆的数据、人的数据可能会有几百万条甚至几千万条,如果使用Redis的Geo数据结构,它们将被全部放在一个zset集合中。在Redis的集群环境中,集合可能会从一个节点迁移到另一个节点,如果单个key的数据过大,会对集群的迁移工作造成较大影响,在集群环境中单个key对应的数据库不宜超过1MB,否则会导致集群迁移出现卡顿现象,影响线上服务的正常运行。

所以,这里建议Geo的数据使用单独的Redis实例部署,不使用集群环境。如果数据量过亿个,甚至更大,就需要对Geo数据进行拆分,按国家拆分、按省份拆分、按市拆分,在人口特大城市甚至可以按区拆分,这样就可以显著降低单个zset集合的大小。

相关文章

  • 项目中Redis应用场景

    一、Redis GEO-实现附近的人 1.1 Redis GEO介绍 Redis GEO主要用于存储地理位置信息,...

  • Redis Geo数据结构

    1、Geo指令的基本用法 Redis提供的Geo指令只有6个,读者们瞬间就可以掌握。使用时,读者务必想到,它只是一...

  • redis GEO数据结构

    Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地...

  • redis-geo

    redis-geo 介绍 算法看geo那个 内部实现就是zset(skiplist) 实例

  • Redis实现地理信息计算

    1 Redis的GEO Redis 在 3.2 版本以后增加了地理位置 GEO 模块,意味着我们可以使用 Redi...

  • Redis源码剖析之GEO——Redis是如何高效检索地理位置的

    Redis GEO 用做存储地理位置信息,并对存储的信息进行操作。通过geo相关的命令,可以很容易在redis中存...

  • redis命令大全

    1、Redis 地理位置(geo) 命令 2、 Redis 键(key) 命令 3、Redis 字符串(Strin...

  • redis GEO

    CEO(地理信息定位): 存储经纬度,计算两地距离,范围计算等API geoaddgeo key logitude...

  • 使用Redis实现附近的人的查询功能 - 例子记录

    1. 数据结构 - GEO GEO 3.2版本开始对GEO(地理位置)的支持使用场景:LBS应用开发 常用命令 G...

  • redis 学习(15)-- GEO

    GEO GEO 简介 Redis 3.2添加新特性 功能:存储经纬度、计算两地距离、范围计算等 基于ZSet实现 ...

网友评论

      本文标题:Redis Geo数据结构

      本文链接:https://www.haomeiwen.com/subject/wilafhtx.html