Redis GeoHash】的更多相关文章

原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11632810.html 背景 微信找附近的人,滴滴找附近的单车,饿了么找附近的餐馆 GeoHash算法 可以使用数据库来进行查询,但是数据库查询性能毕竟是有限的,如果“附近的人”查询请求非常多,在高并发场景下,对数据库的压力还是相当大的,不是一个很好的方案. 业界比较通用的地理位置距离排序算法是GeoHash算法. Redis GeoHash Redis也使用GeoHash算法,提供的Geo指令有6…
一.字符串 字符串键是Redis最基本的键值对类型,将一个单独的键和一个单独的值关联起来.通过字符串键,不仅可以存储和读取字符串,如果输入能被解释为整数和浮点数,还能执行自增或自减操作. 1.SET:设置字符串键的值 命令 SET key value [EX seconds|PX milliseconds] [NX|XX] 效果 为字符串键设置值,如果字符串键不存在,创建这个字符串键:如果已经存在,直接更新值.EX和PX选项设置键的生存时间(以秒或毫秒为单位).当生存时间消耗殆尽后,这个键就会被…
一.MySql不使用空间函数,简单版 1.粗算,根据场景得到一个range,计算经纬度,得到的是一个矩形区域(A),不精确,但是已经有范围这个雏形了,最容易实现的方式之一. 1 2 3 4 5 6 where latitude>y-range and latitude<y+range and longitude>x-range and longitude <x+range order by abs(longitude -x)+abs(latitude -y)  limit 10;…
然后列举一下需求:1.实时性要高,有频繁的更新和读取2.可按距离排序支持分页3.支持多条件筛选(一个经纬度数据还包含其他属性,比如社交系统的性别.年龄) 方案简单介绍:1.sphinx geo索引支持按照距离排序,并支持分页.但是尝试mva+geo失败,还在找原因.无法满足高实时性需求.(可能是不了解实时增量索引配置有误)资源占用小,速度快 2.mongodb geo索引支持按照距离排序,并支持分页.支持多条件筛选.可满足实时性需求.资源占用大,数据量达到百万级请流量在10w左右查询速度明显下降…
刚好要用看了网上翻译版本都是2011,2012年的,随手翻译一下新版 2017年10月28日23:48:08 使用方法 : Ctrl+F 官方英文版 https://github.com/phpredis/phpredis makedown URL:https://github.com/phpredis/phpredis/blob/develop/README.markdown 安装/配置 安装 在OSX上安装 在Windows上构建 PHP Session handler 分布式Redis阵列…
现在很多手机软件都用附近搜索功能,但具体是怎么实现的呢>在网上查了很多资料,mysql空间数据库.矩形算法.geohash我都用过了,当数据上了百万之后mysql空间数据库方法是最强最精确的(查询前100条数据只需5秒左右). 接下来推出一个原创计算方法,查询速度是mysql空间数据库算法的2倍 $lng是你的经度,$lat是你的纬度 SELECT lng,lat, (),) )) AS distance FROM `user_location` 经测试,在100万数据中取前100条数据只需2.…
Redis 地理位置(geo) Redis 键(key) Redis 字符串(String) Redis 哈希(Hash) Redis 列表(List) Redis 集合(Set) Redis 有序集合(sorted set) Redis HyperLogLog Redis 发布订阅 Redis 事务 Redis 脚本 Redis 连接 Redis 服务器 Redis 键(key) Redis DEL 命令 Redis Dump 命令 Redis EXISTS 命令 Redis Expire 命…
前言 在我们平时使用的许多app中有附近的人这一功能,像微信.qq附近的人,哈罗.街兔附近的车辆.这些功能就在我们日常生活中出现. 像类似于附近的人这一类业务,在Java中是如何实现的呢? 本文就简单介绍下目前的几种解决方案,并提供简单的示例代码 注: 本文仅涉及附近的人这一业务场景的解决方案讨论,并未涉及到相关的技术细节和方案优化,各位看官可以放心阅读. 基本套路和方案 目前业内的解决方案大都依据geoHash展开,考虑到不同的数据量以及不同的业务场景,本文主要讨论以下3种方案 Mysql+外…
常见的地理位置相关需求有: 1.查找附近的人 2.显示两点距离 3.点是否在指定范围内(地理围栏) redis.MongoDB.mysql都已支持geo 几种geo方案对比 https://blog.csdn.net/varyall/article/details/80308426 需求1.2用对应的geo即可 需求3判断点是否在指定范围内实现方案(地理围栏) 一般为3中情况:1是否在指定园内,2是否在矩形内,3是否在多边形内 https://blog.csdn.net/u012898245/a…
引言 昨天一位公众号粉丝和我讨论了一道面试题,个人觉得比较有意义,这里整理了一下分享给大家,愿小伙伴们面试路上少踩坑.面试题目比较简单:"让你实现一个附近的人功能,你有什么方案?",这道题其实主要还是考察大家对于技术的广度,本文介绍几种方案,给大家一点思路,避免在面试过程中语塞而影响面试结果,如有不严谨之处,还望亲人们温柔指正! "附近的人" 功能生活中是比较常用的,像外卖app附近的餐厅,共享单车app里附近的车辆.既然常用面试被问的概率就很大,所以下边依次来分析…
前几天收到一个新的需求,需要实现类似"附近的人"的功能:根据自己当前的定位,获取距离范围内的所有任务地点.刚看到这个需求时有点懵逼,第一想到的就是要利用地球的半径公式去计算距离,也就是把地球想成一个球体,去计算球上两点之间的距离.可想而知,这样的方法效率会比较低,每条数据都要来与本人的坐标做计算,太过繁琐.经过大佬的指点,想到了用redis自带的GEO来实现此功能. 实战演习 以下是给大家准备的sql脚本 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECK…
https://matt.sh/redis-geo http://antirez.com/latest/0 http://invece.org/ https://github.com/davidmoten/geo/blob/master/src/main/java/com/github/davidmoten/geo/GeoHash.java http://www.movable-type.co.uk/scripts/latlong-db.html http://www.basistech.com…
Redis 在 3.2 版本以后增加了地理位置 GEO 模块,意味着我们可以使用 Redis 来实现摩拜单车「附近的 Mobike」.美团和饿了么「附近的餐馆」这样的功能了. 地图元素的位置数据使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],纬度正负以赤道为界,北正南负,经度正负以本初子午线 (英国格林尼治天文台) 为 界,东正西负.比如掘金办公室在望京 SOHO,它的经纬度坐标是 (116.48105,39.996794), 都是正数,因为中国位于东北半球…
Redis 提供的 Geo 指令只有 6 个,它只是一个普通的 zset 结构. 增加geoadd 指令携带集合名称以及多个经纬度名称三元组,注意这里可以加入多个三元组127.0.0.1:6379> geoadd company 116.48105 39.996794 juejin(integer) 1127.0.0.1:6379> geoadd company 116.514203 39.905409 ireader(integer) 1127.0.0.1:6379> geoadd c…
像微信 "附近的人",美团 "附近的餐厅",支付宝共享单车 "附近的车" 是怎么设计实现的呢? 一.使用数据库实现查找附近的人 我们都知道,地球上的任何一个位置都可以使用二维的 经纬度 来表示,经度范围 [-180, 180],纬度范围 [-90, 90],纬度正负以赤道为界,北正南负,经度正负以本初子午线 (英国格林尼治天文台) 为界,东正西负.比如说,北京人民英雄纪念碑的经纬度坐标就是 (39.904610, 116.397724),都是正数…
本文是使用 golang 实现 redis 系列的第九篇,主要介绍如何使用 GeoHash 实现搜索附近的人. 搜索附近的POI是一个非常常见的功能,它的技术难点在于地理位置是二维的(经纬度)而我们常用的索引(无论是B树.红黑树还是跳表)都是一维的.GeoHash 算法的本质就是将二维的经纬度转换为一维的表示. 本文核心实现代码可以在Godis:lib/geohash中找到.也可以下载Godis来亲自体验. 兴趣点(Point Of Intererst, POI): 在电子地图中我们关心的各种地…
redis的geo搜索功能是3.2之后新增的,所以实验开始之前先查看redis的版本,确保版本正确. redis的geo多用于地理类应用,所以这次还是用了高德地图API来用作数据源. 首先截取几个点: geoADD("hangzhou", 120.170206, 30.23549, "xihu"); geoADD("hangzhou", 119.810747, 30.245872, "qinshanghu"); geoADD(…
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/144.html 移动互联网增进了人与人之间的联系,其中基于位置信息的服务(Location Based Service,LBS)起到很重要的促进作用.在移动互联网的大环境下,每个手机都变成了一个位置追踪设备,为人们提供了非常丰富的位置服务.无论是附近的人,还是摇一摇等耳熟能详的应用都需要LBS在后台的支撑.但是,目前位置信息的使用过程中存在诸多挑战如相邻计算不准确等.由于…
原文地址 微信.陌陌 架构方案分析 近两年.手机应用,莫过于微信.陌陌之类最受欢迎:但实现原理,分享文章甚少. 故,提出两种方案,供分享:不对之处,敬请留言学习. 目标 查找附近的某某某,由近到远返回结果,且结果中有与目标点的距离. 针对查找附近的某某某,提出两个方案,如下: 方案A: 本方案前,请先阅读:基于LBS功能应用的Geohash方案,看过该文章便可简单知道:1.仅需每分钟将用户的经纬度,上报到数据库:2.然后每次用户查找附近好友时,通过 LIKE 'wm3yr3%',即可获取缺点:稍…
1.redis因为内存不够而启动失败 Microsoft Open Tech group 在 GitHub上开发了一个REDIS Win64的版本,项目地址是:https://github.com/MSOpenTech/redis 可以在项目主页右边找到 zip包下载地址: https://github.com/MSOpenTech/redis/archive/2.8.zip 下载解压,没什么好说的,在解压后的bin目录下有以下这些文件: redis-benchmark.exe #基准测试 re…
原文来自于:http://www.infoq.com/cn/news/2015/07/redis-geo 移动互联网增进了人与人之间的联系,其中基于位置信息的服务(Location Based Service,LBS)起到很重要的促进作用.在移动互联网的大环境下,每个手机都变成了一个位置追踪设备,为人们提供了非常丰富的位置服务.无论是附近的人,还是摇一摇等耳熟能详的应用都需要LBS在后台的支撑.但是,目前位置信息的使用过程中存在诸多挑战如相邻计算不准确等.由于经常面对海量数据请求,通常位置服务的…
环境介绍:jedis:2.8.0 redis版本:3.2 首先说一下redis集群的方式,一种是cluster的 一种是sentinel的,cluster的是redis 3.0之后出来新的集群方式 本身redis3.2的cluster集群是支持密码的 ,具体怎么搭建,可以查找相关的文档,这里只介绍应用层面的操作 jedis2.8.0的版本没有实现对redis cluster集群的密码操作 在jedis中创建redis cluster的对象时,一般是采用 JedisCluster jedisClu…
文章环境: CentOS 7 biuld 1611最小化安装@VMware Redis 3.2.8 安装步骤: #安装gcc yum -y install gcc #下载redis curl -O http://download.redis.io/releases/redis-3.2.8.tar.gz #解压 .tar.gz #转换目录 cd redis-/deps/ #编译依赖 make geohash-int hiredis jemalloc linenoise lua #转换目录 cd .…
第一步:准备 1. 操作系统 CentOS-7-x86_64-Everything-1511 2. redis 版本 redis-3.2.8 3. 修改内核参数 有三种方式: 1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效 2)sysctl vm.overcommit_memory=1 3)echo 1 > /proc/sys/vm/overcommit_memory 附:内核参数 overcommit_memo…
安装 Redis 一般系统都会有软件管理工具,但是通常版本都不会太新,况且 Redis 的安装很简单,因此下面使用源码的安装方式. 下载源码 wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压 tar -zxf redis-3.2.8.tar.gz 创建软连接 ln -s redis-3.2.8 redis 进入 redis 目录 cd redis 编译 make 安装 make install 安装完成后,在 src 和 /…
h1,h2,h3,h4,h5,h6,p,blockquote { margin: 0; padding: 0 } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", Arial, sans-serif; font-size: 13px; line-height: 18px; color: #737373; background-color: white; margin: 10px…
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.它支持丰富的数据类型,和高速的内存读写.正在逐步取代memcached的地位. 下面就演示下在centos6.9的32位下的安装配置过程. 1.安装 2.配置 3.卸载 1.安装 ①我们可以通过在官网下载tar.gz的安装包,或者通过wget的方式下载 [root@localhost data]# wget http://download.redis.io/r…
以下纯属搬砖,我用Python抓取的redis命令列表页内容 如果想看命令的具体使用可查去官网查看,以下整理为个人查找方便而已 地理位置GEOADD 将指定的地理空间位置(纬度.经度.名称)添加到指定的key中GEODIST 返回两个给定位置之间的距离GEOHASH 返回一个或多个位置元素的 Geohash 表示GEOPOS 从key里返回所有给定位置元素的位置(经度和纬度)GEORADIUS 以给定的经纬度为中心, 找出某一半径内的元素GEORADIUSBYMEMBER 找出位于指定范围内的元…
redis数据结构和使用场景 strings lists sets sort sets hashes strings token session validateCode 分布锁 lists 最近联系人 sets 优惠卷 激活码 用户标签 sort sets 排行榜 hashes 购物车 bitmaps 用户签到 在线状态 hyperloglog ip去重复统计 geo 附近的人 摇一摇 两位距离 主要使用场景对应的java源码 /** * 代金卷例子. * set结构保证了value的唯一性.…
1.bitmap位图 1.1 bitmap位图的概念 首先来看一个例子,字符串big, 字母b的ASCII码为98,转换成二进制为 01100010 字母i的ASCII码为105,转换成二进制为 01101001 字母g的ASCII码为103,转换成二进制为 01100111 如果在Redis中,设置一个key,其值为big,此时可以get到big这个值,也可以获取到 big的ASCII码每一个位对应的值,也就是0或1 例如: 127.0.0.1:6379> set hello big OK 1…