转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/144.html
移动互联网增进了人与人之间的联系,其中基于位置信息的服务(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百万次编解码,能满足大部分位置服务应用的需求。
it大牛的分享知识网站http://www.itxuexiwang.com/
分享到:
相关推荐
Redis专场:Redis Enterprise Alibaba Computing Conference
它没有网络模块,因此您可以自由配置自己的模块,也可以使用默认模块( )例cpp_redis :: client cpp_redis::client client;client.connect();client.set( " hello " , " 42 " );client.get( " hello " , [](cpp_...
为了最简单地演示此新功能,Redis GEO App可让您在美国任何地方单击以找到给定半径内最近的城市的列表。 安装Redis 3.2.0 为了使用新的GEO操作,您将需要最新稳定的Redis 3.2.0版本,您可以通过以下方式将其安装在...
Redis-sentinel的三大功能: * 监测 * 通知 * 自动故障恢复 首先Redis-sentinel要建立一个监控的master列表,然后针对master列表的每个master获取监控其的sentinels和slaves供以后故障恢复使用。 用法: Redis.new...
Redis geo 基于地理位置的保存和搜索操作简单总结
Redis在Redis 3.2 版本增加了GEO特性,GEO特性为经纬度和地址信息转换提供缓存。如果地址解析或者逆地址解析量比较大,解析服务商一般都有限制,建议本地缓存,同时也可避免同一地址或经纬度反复访问服务获取信息。...
redis数据库:数据存储
声明:此文档源自钱文品老师所著《Redis深度历险:核心原理和应用实践》,只供个人学习所用,不得私自用于商业用途Redis 深度历险:核心原理与应用实践 | 钱
Redis专场:Codis 集群演化与 Redis 异步迁移 阿里巴巴
Redis系列:深刻理解高性能Redis的本质.doc
Redis命名空间Redis的::命名空间提供了一个接口,您的命名空间的子集密钥空间(例如,具有共同的开始键),并要求宝石。 require 'redis-namespace'# => trueredis_connection = Redis . new# => #<Redis>namespaced...
Redis从入门到精通(四)Redis实战:短信登录 测试项目代码
Redis深度历险:核心原理和应用实践 比较稀缺的紫瑶
redis压缩包,在window系统解压后,双击redis-server.exe即可开启redis服务,双击redis-cli.exe输入redis命令。 适合人群;在window系统学习redis相关命令的开发人员,需要redis完成开发测试任务的开发测试人员
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。 Redis GEO 操作方法有: geoadd:添加地理位置的坐标。 geopos:获取地理位置的坐标。 geodist:计算两个位置之间的...
总结《Redis深度历险:核心原理和应用实践》的xmind图
它没有网络模块,因此您可以自由配置自己的模块,也可以使用默认模块( )例cpp_redis :: client cpp_redis::client client;client.connect();client.set( " hello " , " 42 " );client.get( " hello " , [](cpp_...
主要语言:TypeScript ...推荐理由:一个用于 Node.js 的 Redis 客户端,具有强大、性能优化和功能齐全的特点。它提供了丰富的功能,如管道、集群、Lua 脚本支持等,可以方便地与 Redis 数据库进行交互。
redis-sentinel(哨兵机制)集群安装包,解压即可使用;在linux环境上快速搭建一个简单的基于哨兵模式的redis集群
Redis:使用Java与redis连接 Redis:使用Java与redis连接