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百万次编解码,能满足大部分位置服务应用的需求。
Redis Geo: Redis新增位置查询功能的更多相关文章
- 转:Redis Geo: Redis新增位置查询功能
原文来自于:http://www.infoq.com/cn/news/2015/07/redis-geo 移动互联网增进了人与人之间的联系,其中基于位置信息的服务(Location Based Ser ...
- Redis GEO 功能使用场景
本文来源:https://www.dazhuanlan.com/2020/02/05/5e3a0a3110649/ 背景 前段时间自己在做附近直播相关业务,其中有一个核心的点就是检索用户附近的主播,也 ...
- 【转】redis GEO地理位置
redis目前已经到了3.2版本,3.2版本里面新增的一个功能就是对GEO(地理位置)的支持. 地理位置大概提供了6个命令,分别为: GEOADD GEODIST GEOHASH GEOPOS GEO ...
- Redis GEO 特性在 LBS 中的应用总结
什么是LBS LBS(Location Based Service),基于位置的服务. Redis和GEO Redis 是最热门的 nosql 数据库之一,它的最大特点就是快.所以在 LBS 这种需要 ...
- redis GEO地理位置命令介绍
GEOADD keylongitude latitude member [longitude latitude member ...] Available since 3.2.0. Time comp ...
- SpringBoot整合Redis使用Restful风格实现CRUD功能
前言 本篇文章主要介绍的是SpringBoot整合Redis,使用Restful风格实现的CRUD功能. Redis 介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-valu ...
- Redis GEO地理位置信息,查看附近的人
在之前的一篇文章<SpringBoot入门教程(五)Java基于MySQL实现附近的人>,我们介绍了Java基于MySQL实现查找附近的人的功能.今天就来研究研究"查找附近的人& ...
- 面试突击 | Redis 如何从海量数据中查询出某一个 Key?附视频
1 考察知识点 本题考察的知识点有以下几个: Keys 和 Scan 的区别 Keys 查询的缺点 Scan 如何使用? Scan 查询的特点 2 解答思路 Keys 查询存在的问题 Scan 的使用 ...
- Redis GEO 地理位置
目录 GEO指令 GEOADD GEODIST GEOPOP GEOHASH GEORADIUS GEORADIUSBYMEMBER 指令补充 删除操作 避免单集合数量过多 存储原理 GEOADD存储 ...
随机推荐
- extjs6环境
安装JDK http://www.oracle.com/technetwork/java/javase/downloads/ 安装到指定路径,例如D:\Java配置环境变量 此电脑—属性—高级系统设置 ...
- 如何防止JAVA反射对单例类的攻击?
在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(.加同步锁的懒汉式.加双重校验锁的懒汉式.防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态 ...
- android技巧总结
技巧1. 在写布局文件时,有时不需要给控件指定text值,但是又想知道他的位置是否是自己想要他在的位置.这种情况只有在运行时给他指定text值才能确切地知道它显示的位置. 现在有一种方法可以实现,即利 ...
- Spring 配置 Spring JPA 发生错误的解决方法
今天在项目的applicationContext.xml中配JPA时 <?xml version="1.0" encoding="UTF-8"?> ...
- React Native填坑之旅--class(番外篇)
无论React还是RN都已经迈入了ES6的时代,甚至凭借Babel的支持都进入了ES7.ES6内容很多,本文主要讲解类相关的内容. 构造函数 定义侦探类作为例子. ES5的"类"是 ...
- RTS与CTS的含义
====================================我是分割线首先介绍下网上看到的================================================= ...
- 第七章 内存管理单元MMU介绍
7.1 内存管理单元MMU介绍 7.1.1 S3C2410/S3C2440 MMU特性 负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查 特性: 与ARM V4兼容的映射长度.域.访问权 ...
- Ubuntu下使用USB串口
Ubuntu本身一般都带了USB转串口的驱动. 1. 首先确认系统支持USBSerial,输入以下命令: lsmod | grep usbserial 2. 接上USB串口线,看看系统是否可 ...
- arrayLiist的四种遍历方法
package com.test; import java.util.ArrayList;import java.util.Iterator;import java.util.List; public ...
- rabbitmq安装
1.从源码安装最新的otperlang17,版本(otp_src_17.1.tar.gz): ./configure make make install 2.有可能要安装 和simplebean ...