原文来自于:http://www.infoq.com/cn/news/2015/07/redis-geo

移动互联网增进了人与人之间的联系,其中基于位置信息的服务(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百万次编解码,能满足大部分位置服务应用的需求。

转:Redis Geo: Redis新增位置查询功能的更多相关文章

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

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/144.html 移动互联网增进了人与人之间的联系,其中基于位置信息的服务( ...

  2. Redis GEO 功能使用场景

    本文来源:https://www.dazhuanlan.com/2020/02/05/5e3a0a3110649/ 背景 前段时间自己在做附近直播相关业务,其中有一个核心的点就是检索用户附近的主播,也 ...

  3. 【转】redis GEO地理位置

    redis目前已经到了3.2版本,3.2版本里面新增的一个功能就是对GEO(地理位置)的支持. 地理位置大概提供了6个命令,分别为: GEOADD GEODIST GEOHASH GEOPOS GEO ...

  4. Redis GEO 特性在 LBS 中的应用总结

    什么是LBS LBS(Location Based Service),基于位置的服务. Redis和GEO Redis 是最热门的 nosql 数据库之一,它的最大特点就是快.所以在 LBS 这种需要 ...

  5. redis GEO地理位置命令介绍

    GEOADD keylongitude latitude member [longitude latitude member ...] Available since 3.2.0. Time comp ...

  6. SpringBoot整合Redis使用Restful风格实现CRUD功能

    前言 本篇文章主要介绍的是SpringBoot整合Redis,使用Restful风格实现的CRUD功能. Redis 介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-valu ...

  7. Redis GEO地理位置信息,查看附近的人

    在之前的一篇文章<SpringBoot入门教程(五)Java基于MySQL实现附近的人>,我们介绍了Java基于MySQL实现查找附近的人的功能.今天就来研究研究"查找附近的人& ...

  8. 面试突击 | Redis 如何从海量数据中查询出某一个 Key?附视频

    1 考察知识点 本题考察的知识点有以下几个: Keys 和 Scan 的区别 Keys 查询的缺点 Scan 如何使用? Scan 查询的特点 2 解答思路 Keys 查询存在的问题 Scan 的使用 ...

  9. Redis GEO 地理位置

    目录 GEO指令 GEOADD GEODIST GEOPOP GEOHASH GEORADIUS GEORADIUSBYMEMBER 指令补充 删除操作 避免单集合数量过多 存储原理 GEOADD存储 ...

随机推荐

  1. 标准I/O的替代软件

    标准I/O并不完善. 标准I/O库的一个不足之处是效率不高,这与它需要复制的数据量有关.当使用每次一行函数fgets和fputs时,通常需要复制两次数据:一次是在内核和标准I/O缓冲之间(当调用rea ...

  2. iOS VoiceOver Programming Guide

    VoiceOver是苹果“读屏”技术的名称,属于辅助功能的一部分.VoiceOver可以读出屏幕上的信息,以帮助盲人进行人机交互. 这项技术在苹果的各个系统中都可以看到,OS X,iOS,watchO ...

  3. 从 setNeedsLayout 说起

    本文从 setNeedsLayout 这个方法说起,分享与其相关的 UIKit 视图交互.使用场景等内容. UIKit 为 UIView 提供了这些方法来进行视图的更新与重绘: public func ...

  4. Java基础知识强化之IO流笔记42:IO流总结(图解)

    1. IO流总结(图解)

  5. MVC1笔记

    /// ///直接返回 字符串的 Action方法,适用于 不需要返回大量 html代码的业务(类似于一般处理程序) /// public string Index() { return " ...

  6. android ViewPager滑动事件讲解

    首先ViewPager在处理滑动事件的时候要用到OnPageChangeListener OnPageChangeListener这个接口需要实现三个方法:(onPageScrollStateChan ...

  7. 搭建FTP+PAM+MySQL环境

    搭建FTP+PAM+MySQL环境 1 搭建环境: CentOS6.5或CentOS6.7 [root@vhost3 ~]# uname -a Linux vhost3 -.el6.x86_64 # ...

  8. centos 下安装ati显卡驱动方法

    1)到ati的官网(http://support.amd.com/us/gpudownload/Pages/index.aspx)下载相应的驱动,一定要注意 radeon系列和mobility rad ...

  9. 隐藏/显示&nbsp;我的电脑盘符驱动…

    组策略里更改即可:点击"开始"→"运行",输入"gpedit.msc",打开组策略.在窗口左侧的"本地计算机策略"中依次 ...

  10. jqery筛选

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...