写点什么

Redis Geo: Redis 新增位置查询功能

2015 年 7 月 03 日

移动互联网增进了人与人之间的联系,其中基于位置信息的服务(Location Based Service,LBS)起到很重要的促进作用。在移动互联网的大环境下,每个手机都变成了一个位置追踪设备,为人们提供了非常丰富的位置服务。无论是附近的人,还是摇一摇等耳熟能详的应用都需要 LBS 在后台的支撑。但是,目前位置信息的使用过程中存在诸多挑战如相邻计算不准确等。由于经常面对海量数据请求,通常位置服务的计算都需要数据库来完成,Redis Geo 模块因此而生,旨在提供精准而且稳定的位置服务。

在位置服务的挑战中,常见的是计算两个位置是否相邻的问题。位置信息由一个四元组构成,(经度、纬度、海拔、时间),在使用过程中比较常用的是经纬度。想要进行相邻计算,需要一个二维索引。问题是现有的基于简单的一维索引和划范围搜索实现的二维索引,基本只适用于整数查询,并不适用于经纬度这种位置的相似度查询。意识到了这个困难,且伴随位置服务需求日益增长的情况,2008 年 Gustavo Niemeyer 提出了 Geohash ,简单来说是一个 32 位的编码字符串来将位置能够编码整合成为可范围查找的实体。由于大多数数据库都支持范围查询,因此位置就变得可查找和计算。原始 Geohash 的缺点是查询的准确度有时较低,后续开发者又创造了 52 位 Geohash 等来满足定制化的需求。

NoSQL 中,Mongodb 对位置服务的支持较好,稳定地支持了foursquare 等应用。而HBase 也曾推出相关教程支持在应用中引入位置服务。作为优秀NoSQL 数据库的典范,Redis 在位置计算方面却略显薄弱。为此,意大利程序员Salvatore Sanfilippo( antirez@GitHub )维护了一个专门为 Redis 增加位置计算的分支。发布之后,获得领域内的一致认可,短短几个月收获多达 1 万 3 千余个星标。在 Hacker News 上,许多程序员也表示对 Redis 位置查询的功能相见恨晚,大家积极讨论了 Redis Geo 存在的必要性,以及后续应该从性能和查询准确性上提升的若干手段,甚至有人进一步贡献了 Redis Geo 的 Docker 镜像

更多关于 Redis Geo 的细节可以参考 antirez 给出的文档页面,其中包括了Redis Geo 的基本使用,例如添加经纬度、计算经纬度相似度、计算城市之间的包含关系等多种位置计算功能。antirez 还进一步解释了Redis Geo 的工作原理,以及该模块在Benchmark 上运行的性能表现,每秒可达近5 百万次编解码,能满足大部分位置服务应用的需求。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015 年 7 月 03 日 04:4412788
用户头像

发布了 268 篇内容, 共 103.1 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

实用威胁建模指南(二)

亚伦碎语

敏捷 安全 系统安全架构 系统安全 威胁建模

第四周作业

Geek_4c1353

极客大学架构师训练营

甲方日常 27

句子

生活 工作 随笔杂谈 日常

第4周 作业一

bearlu

TensorFlow安装

菜鸟小sailor 🐕

学习

第二周课后练习

大大猫

极客大学架构师训练营

架构师训练营 1 期 - 第四周总结(vaik)

行之

极客大学架构师训练营

区块链支付系统开发源码,usdt承兑系统搭建

WX13823153201

区块链支付系统开发

架構師訓練營 week4 作業

ilake

手把手教你AspNetCore WebApi:数据验证

AI代笔

ASP.NET Core web api 数据验证

go-zero流数据处理利器

万俊峰Kevin

go stream functional

架构师训练营 1 期 - 第四周作业(vaik)

行之

极客大学架构师训练营

Spring学习笔记(一)手写一个简单的Spring

无语

Spring Framework

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?

knight

Redis-技术专题-哨兵配置和原理

李浩宇/Alex

典型互联网公司使用的技术

happy

云服务时代,未来怎么样保障自己的核心竞争力?

boshi

个人成长 职业规划 云服务

浅析 Java 内存模型 一

朱华

Java JMM

架構師訓練營 week4 總結

ilake

CPU 执行程序的秘密,藏在了这 15 张图里

小林coding

操作系统 计算机基础 计算机 编译器、程序语言、CPU 指令

延迟满足

时间是一个人最好的证明

延迟满足感 成功

《我想进大厂》之Redis夺命连环11问

艾小仙

Java redis 面试 程序语言

spring-boot-route(十一)数据库配置信息加密

Java旅途

Java Spring Boot

浅析 Java 内存模型 三

朱华

Java volatile JMM

第9周作业

Vincent

极客时间 极客大学

详解「区块链」溯源

netkiller

区块链 防伪 超级账本 标签 区块链产品溯源

第9周总结

Vincent

极客时间 极客大学

第 4 周 系统架构总结

bearlu

系统架构

诺奖以上,真相未满:追捕黑洞二百年

脑极体

第三周架构师训练营作业

Geek_4c1353

极客大学架构师训练营

架构师训练营第 1 期 -week4

习习

Redis Geo: Redis新增位置查询功能-InfoQ