`
zhaomengsen
  • 浏览: 207158 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

REDIS GEO: REDIS新增位置查询功能

阅读更多
转载于: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 GEO

    Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。 Redis GEO 操作方法有: geoadd:添加地理位置的坐标。 geopos:获取地理位置的坐标。 geodist:计算两个位置之间的...

    redis最新3.0版本

    7. **地理空间索引`: Redis 3.0添加了`GEO`命令集,支持对地理位置数据进行存储和查询,如计算距离、获取范围内的成员等,为地理位置相关的应用提供了便利。 8. **内存管理优化**: 为了更有效地利用内存,Redis 3.0...

    最全php_redis,从2.2.7到4.2.0

    - 在这个阶段,扩展增加了对Redis 3.x的新特性的支持,如HyperLogLog、 GEO(地理空间)等。 - 改进:提升了性能和稳定性,增加错误处理机制,提供更完善的API。 3. PHP Redis 4.0.0 - 引入了对Redis Cluster的...

    redis-5.0.4

    - Redis Modules:允许扩展Redis核心功能,例如TTL模块、Geo索引等。 - LRU和LFU策略改进:优化了内存管理,提升了缓存效率。 - AOF重写:更高效的AOF(Append Only File)重写策略,减少磁盘占用。 - Pub/Sub...

    Redis3.2(windows64位安装版).zip

    6. **Geo索引**:虽然3.2版本未完全实现,但为后来的地理位置索引功能打下了基础,使Redis能够支持基于地理距离的查询。 7. **Improved AOF durability**:增强了一致性日志(Append Only File,AOF)的持久化策略...

    redis64.3.0Andredis4.0tag

    2. **GEO(地理空间索引)**:新增了对地理位置数据的支持,可以添加、查询和操作基于经纬度的位置信息。 3. **Sorted Set分数排序精度提升**:分数现在可以存储到任意精度,使得排序更加精确。 4. **Module系统**:...

    Redis2.4.5+Serverstackredis3.29无限制

    4. **Geo(地理位置)支持**:提供了GEOADD、GEORADIUS等命令,用于存储和查询地理位置信息,支持地理围栏和范围查询。 5. **HyperLogLog**:提供了对稀疏数据计数的高效算法,用于估算不重复元素的数量,节省存储...

    linux redis5 .zip

    Redis 5.0.0引入模块系统,允许开发人员扩展Redis功能,如Geo索引、图数据结构等。 8. **内存管理**: Redis有优化的内存管理策略,包括LRU(Least Recently Used)和LFU(Least Frequently Used)淘汰策略,以在...

    Redis-x64-3.2-windows系统安装包.zip

    5. **地理空间索引**:Redis 3.2 引入了 `GEO` 命令,如 `GEOADD`、`GEORADIUS` 等,支持地理位置信息的存储和查询,可用于构建基于位置的服务。 6. **发布/订阅增强**:增加了 `PUBSUB` 命令的更多选项,例如 `...

    redis-3.2.rar

    - **Geo 库**:支持地理位置信息处理,如计算距离、范围查询等。 - **Stream 数据类型**:类似日志流的数据结构,每个元素有时间戳和键值对,用于记录时间序列数据。 3. **安装与配置**: - 包含在压缩包中的 ...

    redis面试题Redis 常见面试题.docx

    - **GEO**:适用于存储和查询地理位置信息。 - **Stream**:适用于实现消息队列,尤其是多消费者模型的消息队列。 这些数据类型不仅丰富了Redis的功能,也使得Redis能够更好地满足不同应用场景的需求。通过对这些...

    Redis中3种特殊的数据类型(BitMap、Geo和HyperLogLog)

    前言 Reids 在 Web 应用的开发中使用非常广泛,几乎所有的后端技术都会有涉及到 Redis 的使用。Redis 种除了常见的字符串 String、字典 Hash、...Redis 从 2.2 版本之后新增了setbit, getbit, bitcount 等几个 bitmap

    jedis-2.9.jar

    在 Jedis 2.9 版本中,开发者们可以期待一系列的改进和新功能,尤其是对于新引入的 Redis GEO 指令的支持。 Redis 是一款高性能的键值存储系统,特别适合用于缓存和数据同步。Jedis 作为其官方推荐的 Java 客户端,...

Global site tag (gtag.js) - Google Analytics