首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Redis实现附近的人及打车服务

用户点击 Near Me 功能时,那么通过后台就可以以当前用户的位置为圆点,距离为半径查询相关的用户展示即可完成 GEO底层结构 设计一个数据类型的底层结构时,首先要知道,待处理的数据的访问特点。...对于一个LBS应用,除记录经纬度,还需根据用户经纬度信息在车辆的Hash集合中进行范围查询。 而涉及到范围查询,就要求集合中的元素有序,Hash显然不满足需求。...如下命令即可将ID=33车辆的当前经纬度存入GEO集合: GEOADD cars:locations 116.034579 39.030452 33 当用户想寻找自己附近的网约车,LBS应用就能使用GEORADIUS...如LBS应用执行下面命令: # 根据输入的用户经纬度信息,查找以该经纬度为中心的5公里内车辆信息,返回给LBS应用 GEORADIUS cars:locations 116.054579 39.030452...5 km ASC COUNT 10 进一步限定返回的车辆信息: ASC,让返回的车辆信息距离中心位置从近到远排序,以方便选择最近车辆 COUNT,指定返回的车辆信息的数量 可能5公里范围内车辆很多

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Redis之GEO类型解读

Redis GEO 可以在需要处理地理位置数据的场景中使用,例如近邻查询、地理位置路由、基于地理位置的服务等。...这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。...如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。...georadius 命令 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。 范围可以使用以下其中一个单位: m 表示单位为米。...通过以下两个参数, 用户可以指定被返回位置元素的排序方式: ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。 DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。

24540

Redis之GEO类型解读

Redis GEO 可以在需要处理地理位置数据的场景中使用,例如近邻查询、地理位置路由、基于地理位置的服务等。...这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。...如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。...georadius 命令 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。 范围可以使用以下其中一个单位: m 表示单位为米。...通过以下两个参数, 用户可以指定被返回位置元素的排序方式: ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。 DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。

404110

Redis实现附近的人

用户登录应用时,或者保持用户登录后用户使用应用时,客户端是可以时刻获取用户位置信息的(前提是用户要开启位置获取的权限),客户端获取到最新的地理位置后,上传到后端服务器进行更新。...当用户点击 Near Me 功能时,那么通过后台就可以以当前用户的位置为圆点,距离为半径查询相关的用户展示即可完成 注意 redis 的经纬度有 0.5%的误差,所以精度要求高的比如地图就慎用 redis...通过以下两个参数, 用户可以指定被返回位置元素的排序方式: ASC 根据中心的位置, 按照从近到远的方式返回位置元素。 DESC 根据中心的位置, 按照从远到近的方式返回位置元素。...# 以121.446617 31.205593(张三位置)为圆心,3000m为半径,查询返回用户及其位置 127.0.0.1:0>GEORADIUS diner:location 121.446617...使用GEOADD添加地理位置信息时,用标准格式的参数 x,y, 所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。

71020

如何实现查找附近的人-GEO

geodist:计算两个位置之间的距离georadius根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。...,结果基本吻合查询某位置内的其他成员信息georadius以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。...根据给定的经纬度坐标查询附近的成员# 根据查询的坐标,查询5km以内的成员信息127.0.0.1:6379> georadius km 102.705224 25.0499233 5 km1) "b"2...) "a"3) "c"# 根据坐标查询5km以内的成员信息,并返回位置元素与中心之间的距离127.0.0.1:6379> georadius km 102.705224 25.0499233 5 km...store这个key里,查询如果频繁,这个key容易成为热key,可以使用redis集群,同样的数据多设置几个key,比如:store_1,store_2,store_3 ,查询的时候可以根据用户id取余

29720

Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

附近的人核心思想如下: 以 “我” 为中心,搜索附近的 Ta; 以 “我” 当前的地理位置为准,计算出别人和 “我” 之间的距离 “我” 与别人距离的远近排序,筛选出离我最近的用户。...实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...「宅男」登陆 app获取「心动女生」的时候,app根据「宅男」的经纬度查找附近的「女神」。 获取到位置符合的「女神」ID 列表后,再从数据库获取 ID 对应的「女神」信息返回用户。...Hash看起来好像可以实现,但是 LBS 应用除了记录经纬度以外,还需要对 Hash 集合中的数据进行范围查询根据经纬度换算成距离排序。 而 Hash 集合的数据是无序的,显然不可取。...所以,这里建议 Geo 的数据使用单独的 Redis 集群实例部署。 如果数据量过亿甚至更大,就需要对 Geo 数据进行拆分,国家拆分、省拆分,市拆分,在人口特大城市甚至可以区拆分。

1.1K50

一文教你如何使用

GEORADIUS根据指定的位置和距离,在指定的键中查找附近的位置。 GEORADIUSBYMEMBER:根据指定的位置成员和距离,在指定的键中查找附近的位置。...GEORADIUS GEORADIUS命令用于根据指定的位置和距离,在指定的键中查找附近的位置。...WITHDIST:返回位置与查询点的距离。 ASC|DESC:距离升序或降序排序。 COUNT count:返回最多指定数量的结果。 STORE key:将结果存储到指定的键中。...GEORADIUS命令可以根据指定的位置和距离,在指定的键中查找附近的位置。类似地,GEORADIUSBYMEMBER命令允许根据指定的位置成员和距离进行搜索。...GEOSEARCH命令提供更灵活的搜索选项,可以根据查询参数进行位置搜索。而GEOSEARCHSTORE命令在执行搜索的同时,将结果存储到新的键中,方便后续使用

29630

redis | 九、redis之Geospatial

查询某个坐标附近的坐标(附近的人功能) 查询两点间的距离 …… 二、命令实践 由于geo命令过少,不进行了分类,完整命令请看官网,本篇命令请看附录!...这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。...如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。 GEODIST 命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。...在给定以下可选项时, 命令会返回额外的信息: WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。距离的单位和用户给定的范围单位保持一致。...通过以下两个参数, 用户可以指定被返回位置元素的排序方式: ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。 DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。

62820

用 Redis 查询 “附近的人” !妙啊!

其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。要实现微信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...GEORADIUS 使用方式 GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH]...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...只有连续了,查询效率才会高,不然要多做许多距离运算。 综上,我们从源码角度解析了Redis Geo模块中 “增(GEOADD)” 和 “查(GEORADIUS)” 的详细过程。

22740

Redis 实战篇:Geo 算法教你邂逅附近女神

附近的人核心思想如下: 以 “我” 为中心,搜索附近的 Ta; 以 “我” 当前的地理位置为准,计算出别人和 “我” 之间的距离 “我” 与别人距离的远近排序,筛选出离我最近的用户。...实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...「宅男」登陆 app获取「心动女生」的时候,app根据「宅男」的经纬度查找附近的「女神」。 获取到位置符合的「女神」ID 列表后,再从数据库获取 ID 对应的「女神」信息返回用户。...” Hash看起来好像可以实现,但是 LBS 应用除了记录经纬度以外,还需要对 Hash 集合中的数据进行范围查询根据经纬度换算成距离排序。 而 Hash 集合的数据是无序的,显然不可取。...所以,这里建议 Geo 的数据使用单独的 Redis 集群实例部署。 如果数据量过亿甚至更大,就需要对 Geo 数据进行拆分,国家拆分、省拆分,市拆分,在人口特大城市甚至可以区拆分。

1.6K10

IM里“附近的人”功能实现原理是什么?如何高效率地实现它?

它需要做以下两件事情: 1)所有使用该IM产品的人,在使用“附近的人”功能前提交自已的地理位置; 2)根据“我”的地理位置,计算出别人跟我的距离; 3)将第2步中计算出的距离由近及远,进行排序。...具体在产品技术上的实现原理,也很容易理解: 1)现在移动端(ios、android等),通过系统的API很容易抓到用户当前的位置(即经纬度数据); 2)根据第1步中的经纬度数据,很容易计算出两个点之间的距离...,然后距离进行筛选?...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...只有连续了,查询效率才会高,不然要多做许多距离运算。 9、本文小结 综合上述章节,我们从源码角度解析了Redis Geo模块中 “增(GEOADD)” 和 “查(GEORADIUS)” 的详细过程。

1.8K00

Redis 是怎么实现 “附近的人” 的?

其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现微信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...shared.null[c->resp])) == NULL || checkType(c, zobj, OBJ_ZSET)) { return; } //根据用户输入...只有连续了,查询效率才会高,不然要多做许多距离运算。 综上,我们从源码角度解析了Redis Geo模块中 “增(GEOADD)” 和 “查(GEORADIUS)” 的详细过程。

1.4K10

Redis 到底是怎么实现“附近的人”这个功能的呢?

来源:juejin.im/post/5da40462f265da5baf410a11 操作命令 GEOADD 使用方式 源码分析 算法小结 GEORADIUS 使用方式 源码分析 算法小结 算法分析 -...其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。要实现微信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...只有连续了,查询效率才会高,不然要多做许多距离运算。 综上,我们从源码角度解析了Redis Geo模块中 “增(GEOADD)” 和 “查(GEORADIUS)” 的详细过程。

1.1K10

Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

附近的人核心思想如下: 以 “我” 为中心,搜索附近的 Ta; 以 “我” 当前的地理位置为准,计算出别人和 “我” 之间的距离 “我” 与别人距离的远近排序,筛选出离我最近的用户。...实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...「宅男」登陆 app获取「心动女生」的时候,app根据「宅男」的经纬度查找附近的「女神」。 获取到位置符合的「女神」ID 列表后,再从数据库获取 ID 对应的「女神」信息返回用户。...Hash看起来好像可以实现,但是 LBS 应用除了记录经纬度以外,还需要对 Hash 集合中的数据进行范围查询根据经纬度换算成距离排序。 而 Hash 集合的数据是无序的,显然不可取。...所以,这里建议 Geo 的数据使用单独的 Redis 集群实例部署。 如果数据量过亿甚至更大,就需要对 Geo 数据进行拆分,国家拆分、省拆分,市拆分,在人口特大城市甚至可以区拆分。

1.3K20

Redis 到底是怎么实现“附近的人”这个功能的?

其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现微信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...GEORADIUS 使用方式 GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...只有连续了,查询效率才会高,不然要多做许多距离运算。 综上,我们从源码角度解析了Redis Geo模块中 “增(GEOADD)” 和 “查(GEORADIUS)” 的详细过程。

77920

【Redis】四大特殊的数据类型之 Geospatial

这样一来,我们就可以把经纬度保存到 Sorted Set 中,利用 Sorted Set 提供的“权重进行有序范围查找”的特性,实现 LBS 服务中频繁使用的“搜索附近”的需求。...] # 返回两个给定位置之间的距离。 GEODIST key member1 member2 [m|km|ft|mi] # 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。...执行下面的这个命令,就可以把 ID 号为 33 的车辆的当前经纬度位置存入 GEO 集合中: GEOADD cars:locations 116.034579 39.030452 33 当用户想要寻找自己附近的网约车时...,LBS 应用就可以使用 GEORADIUS 命令。...例如,LBS 应用执行下面的命令时,Redis 会根据输入的用户的经纬度信息(116.054579,39.030452 ),查找以这个经纬度为中心的 5 公里内的车辆信息,并返回给 LBS 应用。

25740

简单几步,实现 Redis 查询 “附近的人”

其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现微信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...---- GEORADIUS 使用方式 GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...只有连续了,查询效率才会高,不然要多做许多距离运算。 综上,我们从源码角度解析了Redis Geo模块中 “增(GEOADD)” 和 “查(GEORADIUS)” 的详细过程。

59620

Redis 到底是怎么实现“附近的人”这个功能的?

其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现微信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...GEORADIUS 使用方式 GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...只有连续了,查询效率才会高,不然要多做许多距离运算。 综上,我们从源码角度解析了Redis Geo模块中 “增(GEOADD)” 和 “查(GEORADIUS)” 的详细过程。

89930

看用 Redis 如何实现微信「​附近的人」​功能?

其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现微信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...GEORADIUS 使用方式 GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...只有连续了,查询效率才会高,不然要多做许多距离运算。 综上,我们从源码角度解析了Redis Geo模块中 “增(GEOADD)” 和 “查(GEORADIUS)” 的详细过程。

90150
领券