Redis Geo:Redis新增位置查询功能
来源:互联网 发布:谷歌娘软件 编辑:程序博客网 时间:2024/06/05 15:58
移动互联网增进了人与人之间的联系,其中基于位置信息的服务(LocationBasedService,LBS)起到很重要的促进作用。在移动互联网的大环境下,每个手机都变成了一个位置追踪设备,为人们提供了非常丰富的位置服务。无论是附近的人,还是摇一摇等耳熟能详的应用都需要LBS在后台的支撑。但是,目前位置信息的使用过程中存在诸多挑战如相邻计算不准确等。由于经常面对海量数据请求,通常位置服务的计算都需要数据库来完成,RedisGeo模块因此而生,旨在提供精准而且稳定的位置服务。
在位置服务的挑战中,常见的是计算两个位置是否相邻的问题。位置信息由一个四元组构成,(经度、纬度、海拔、时间),在使用过程中比较常用的是经纬度。想要进行相邻计算,需要一个二维索引。问题是现有的基于简单的一维索引和划范围搜索实现的二维索引,基本只适用于整数查询,并不适用于经纬度这种位置的相似度查询。意识到了这个困难,且伴随位置服务需求日益增长的情况,2008年GustavoNiemeyer提出了Geohash,简单来说是一个32位的编码字符串来将位置能够编码整合成为可范围查找的实体。由于大多数数据库都支持范围查询,因此位置就变得可查找和计算。原始Geohash的缺点是查询的准确度有时较低,后续开发者又创造了52位Geohash等来满足定制化的需求。
NoSQL中,Mongodb对位置服务的支持较好,稳定地支持了foursquare等应用。而HBase也曾推出相关教程支持在应用中引入位置服务。作为优秀NoSQL数据库的典范,Redis在位置计算方面却略显薄弱。为此,意大利程序员SalvatoreSanfilippo(antirez@GitHub)维护了一个专门为Redis增加位置计算的分支。发布之后,获得领域内的一致认可,短短几个月收获多达1万3千余个星标。在Hacker News上,许多程序员也表示对Redis位置查询的功能相见恨晚,大家积极讨论了RedisGeo存在的必要性,以及后续应该从性能和查询准确性上提升的若干手段,甚至有人进一步贡献了Redis Geo的Docker镜像。
更多关于Redis Geo的细节可以参考antirez给出的文档页面,其中包括了RedisGeo的基本使用,例如添加经纬度、计算经纬度相似度、计算城市之间的包含关系等多种位置计算功能。antirez还进一步解释了RedisGeo的工作原理,以及该模块在Benchmark上运行的性能表现,每秒可达近5百万次编解码,能满足大部分位置服务应用的需求。
具体讲解链接:https://matt.sh/redis-geo#_how-to-add-geo-commands-to-redis
- Redis Geo:Redis新增位置查询功能
- REDIS GEO: REDIS新增位置查询功能
- Redis 3.2 GEO功能支持
- Redis GEO
- Redis GEO
- Redis GEO
- Redis-GEO
- Redis服务器简单操作类及GEO坐标附近位置查询
- Redis GEO 特性简介
- Redis GEO 特性简介
- Redis GEO 测试
- Redis GEO地理位置
- spark streaming + redis(geo)
- Redis GEO 测试
- Redis GEO地理位置命令
- Redis GEO 特性
- Redis GEO工具类
- (九)redis GEO地理位置
- 属性绑定:属性被绑定到一个表达式,这个属性就会被设置为自动更新,但是,分配静态值会移除绑定
- hdu1258(Sum It Up)
- HBuilder开发App教程10-完成事项
- centos中 ,设置index.html 和 index.php的优先级
- HDU1001
- Redis Geo:Redis新增位置查询功能
- HDU1114_Piggy-Bank
- 斐波那契数列算法及时间复杂度分析
- Oracle 11g R2+RAC+ASM+redhat安装详解2
- 基于UBUNTU的NODEJS开发环境搭建
- HBuilder开发App教程11-添加事项
- 在Win7中运行某些软件时,突然提示出错信息“应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具。”
- asmack在openfire中发送自定义属性、节点的消息
- hdu 2844 Coins dp