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

利用Redis的Geo功能实现查找附近的位置

GEO相关的命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素的 Geohash 表示 GEOPOS 从 key 里返回所有给定位置元素的位置(经度纬度) GEODIST 返回两个给定位置之间的距离...GEORADIUS 以给定的经纬度为中心, 找出某一半径内的元素 GEOADD 将指定的地理空间位置(纬度经度、名称)添加到指定的 key 中 GEORADIUSBYMEMBER 找出位于指定范围内的元素...2.1 写入地理信息 那么如何实现目标单位半径内的所有元素呢?我们可以将所有的位置的经纬度通过上表中的GEOADD将这些地理信息转换为 52 位的Geohash写入Redis。...2.2 统计单位半径内的地区 我们可以借助于GEORADIUS来找出以给定经纬度,某一半径内的所有元素。...WITHCOORD 将位置元素的经度和维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。 距离的单位和查询单位一致,非必选。

2.3K50

利用Redis的Geo功能实现查找附近的位

GEO相关的命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素的 Geohash 表示 GEOPOS 从 key 里返回所有给定位置元素的位置(经度纬度) GEODIST 返回两个给定位置之间的距离...GEORADIUS 以给定的经纬度为中心, 找出某一半径内的元素 GEOADD 将指定的地理空间位置(纬度经度、名称)添加到指定的 key 中 GEORADIUSBYMEMBER 找出位于指定范围内的元素...2.1 写入地理信息 那么如何实现目标单位半径内的所有元素呢?我们可以将所有的位置的经纬度通过上表中的GEOADD将这些地理信息转换为 52 位的Geohash写入Redis。...2.2 统计单位半径内的地区 我们可以借助于GEORADIUS来找出以给定经纬度,某一半径内的所有元素。...WITHCOORD 将位置元素的经度和维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。距离的单位和查询单位一致,非必选。

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

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

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius

89930

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

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius

90150

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

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius

1.1K10

揭开Redis“附近的人”的神秘面纱

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius

94220

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

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius

1.9K10

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

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius

78020

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

Redis Geo 模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥:1、参数提取和校验;2、将入参经纬度换为52位的geohash值(score);3、调用ZADD命令将member及其对应的score存入集合key中。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius...进一步找出与中心点距离小于输入半径的对象,进行返回。

23140

Redis 实现「附近的人」

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius...进一步找出与中心点距离小于输入半径的对象,进行返回。

70220

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

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius

1.4K10

一文了解geohash原理,实践实战设计思路

经度相等的情况下: 纬度每隔0.00001度,距离相差约1.1米; 每隔0.0001度,距离相差约11米; 每隔0.001度,距离相差约111米; 每隔0.01度,距离相差约1113米; 每隔0.1度...Geohash 实战系列 基于mysql实现附近人查询 基于mysql + GeoHash实现附近人查询 基于redis + GeoHash实现附近人查询 基于mongoDB实现附近人查询 基于es搜索引擎实现附近人查询...(不推荐使用了) 基于mysql + GeoHash实现附近人查询 ① 设计思路 在原本存储用户经纬度的表中:入库时计算经纬度对应的geohash字符串存储到表中;那么存储时需要我们明确字符串的长度。...那么我们查询的时候就不需要用经纬度查询,可以这样:select * from xx where geohash like 'geohash%'进行模糊查询查询到结果集在通过经纬度计算距离;然后筛选指定的距离例如...② 服务端收到请求,然后通过api(http或者rpc)请求上游搜索引擎组的数据 ③ 搜索组拿到请求参数解析查询对应关系链 ④ 高效率返回给调用者 支持分页查询以及更多条件的查询方案;性能优越、可分页

3K20

基于 Redis Geo 实现地理位置服务(LBS)中查找附近 XXX 的功能

在此之前,学院君在基于 Laravel + Vue 构建前后端分离应用 这个项目中就已经实现过类似的 LBS 服务 —— 定位当前用户所在的城市然后显示该城市所有的咖啡店: 基于数据库进行地理位置查询...不过在那里我们是通过查询高德地图 API 实现的地理位置查询,对于这种比较简单的、数据量不大的应用,还可以基于数据库进行查询,假设当前用户所在位置的经度是 u_longitude,纬度是 u_latitude...Geo 指令的使用介绍 Redis Geo 提供了如下八个指令: 基本使用 我们可以通过 GEOADD 指令添加元素到 Geo 集合: 第一个参数是键名,然后是经度、维度和元素值,我们按照这个约定添加如下几个咖啡店及对应经纬度坐标到代表咖啡店集合的...接下来,我们就可以通过 Geo 提供的 GEODIST 指令计算咖啡店之间的距离了(最后面的参数距离单位): 还可以通过 GEOPOS 指令获取指定元素的坐标位置: 或者位置的哈希值: 你可以在 geohash.org...这个网站通过哈希值查询其对应的地理位置: 圆形区域查询 接下来,我们可以通过 GEORADIUSBYMEMBER 指令来查询指定坐标附近的元素: 可以看到这个指令的基本参数包括键名、元素名、查询半径

3.6K20

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

解决基于地理位置的搜索,很多数据库品牌都支持:MySQL、MongoDB、Redis 等都能支持地理位置的存储。...当用户点击 Near Me 功能时,那么通过后台就可以以当前用户的位置为圆点,距离半径查询相关的用户展示即可完成 GEO底层结构 设计一个数据类型的底层结构时,首先要知道,待处理的数据的访问特点。...这种格式允许半径查询检查的 1 + 8 个领域需要覆盖整个半径,并丢弃元素以外的半径。...这种格式允许半径查询检查的 1 + 8 个领域需要覆盖整个半径,并丢弃元素以外的半径。...指定成员的位置被用作查询的中心 使用GEOADD添加地理位置信息时,用标准格式的参数 x,y, 所以经度必须在纬度之前。

1.2K20

利用 Redis 实现“附近的人”功能!

Redis Geo 模块包含了以下 6 个命令: GEOADD:将给定的位置对象(纬度经度、名字)添加到指定的 Key。 GEOPOS:从 Key 里面返回所有给定位置对象的位置(经度纬度)。...GEORADIUS:以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象。...将给定的位置对象(纬度经度、名字)添加到指定的 Key。其中,Key 为集合名称,Member 为该经纬度所对应的对象。...算法小结 简单总结下 GEOADD 命令都干了啥: 参数提取和校验 将入参经纬度换为 52 位的 GEOHASH 值(Score) 调用 ZADD 命令将 Member 及其对应的 Score 存入集合...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。

97620

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

Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度纬度); GEODIST...将给定的位置对象(纬度经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...算法小结 简单总结下GEOADD命令都干了啥: 1、参数提取和校验; 2、将入参经纬度换为52位的geohash值(score); 3、调用ZADD命令将member及其对应的score存入集合key...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小)     steps = geohashEstimateStepsByRadius

59820

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

下面是一个简单的Java版实现: /** * 计算地球上任意两点(经纬度)距离 * * @param long1 第一点经度 * @param lat1 第一点纬度...* @param long2 第二点经度 * @param lat2 第二点纬度 * @return 返回距离 单位:米 */ public static double...Redis Geo模块的6个指令用途说明: 1)GEOADD:将给定的位置对象(纬度经度、名字)添加到指定的key; 2)GEOPOS:从key里面返回所有给定位置对象的位置(经度纬度); 3...7.3 算法小结 简单总结下GEOADD命令都干了啥: 1)参数提取和校验; 2)将入参经纬度换为52位的geohash值(score); 3)调用ZADD命令将member及其对应的score存入集合...,计算查询的9个搜索框的geohash精度(位) //这里用到latitude主要是针对极地的情况对精度进行了一些调整(纬度越高,位数越小) steps = geohashEstimateStepsByRadius

1.8K00

Redis实现附近的人

解决基于地理位置的搜索,很多数据库品牌都支持:MySQL、MongoDB、Redis 等都能支持地理位置的存储。...当用户点击 Near Me 功能时,那么通过后台就可以以当前用户的位置为圆点,距离半径查询相关的用户展示即可完成 注意 redis 的经纬度有 0.5%的误差,所以精度要求高的比如地图就慎用 redis...GEOPOS 从key里返回所有给定位置元素的位置(经度纬度)。...使用GEOADD添加地理位置信息时,用标准格式的参数 x,y, 所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。...这种格式允许半径查询检查的 1 + 8 个领域需要覆盖整个半径,并丢弃元素以外的半径

71020

geohash之2d 地理空间索引

有关查询存储在地理空间索引中的数据的信息,请参阅使用2d索引查询地空间。 存储位置数据 要使用2d地理空间索引,您必须在预定的二维坐标系(例如经度纬度)上对位置数据建模。...如果您将纬度经度用作坐标系,请始终先存储经度。MongoDB的二维球形指数运算符只能识别[ 经度纬度 ]排序。 创建地理空间索引 重要 MongoDB只支持每个集合一个地理空间索引。...使用 bucketSize的参数ensureIndex)(确定接近。甲 bucketSize的5创建组位置的值是5个单位指定的经度纬度的范围内的索引。 bucketSize还决定索引的粒度。...球形查询使用Radians作为距离 为了使球形操作员正常工作,您必须将距离换为弧度,然后将弧度转换为应用程序使用的距离单位。...转换: 到弧度的距离:用与距离测量相同的单位将距离除以球体的半径(例如地球)。 弧度距离:将弧度测量值乘以要转换距离的单位系统中的球体半径(例如地球)。

2.2K40

PHP 经纬度坐标相关计算方法

计算经纬度坐标间的距离 3. 根据经纬度坐标距离排序 4. 经纬度范围查询 1....计算经纬度坐标间的距离 计算经纬度坐标间的距离 功能函数 (前四个参数为两组经纬度坐标) /** * 计算经纬度坐标间的距离 * @param $lng1 经度 * @param $lat1 纬度 *..., $lang = 'en'){    // 地球的近似半径(单位:米)    $earthRadius = 6367000;    // 将这些度数转换为弧度以使用公式    $lat1 = ($lat1...经纬度范围查 经纬度范围计算 功能函数 /** * 经纬度范围计算 * @param $longitude 经度 * @param $latitude  纬度 * @param $radius    半径...首先,根据当前位置获取 3 公里内的经纬度范围,然后带上查询条件查询数据库即可 $longitude = 113.869205; //经度$latitude  = 22.583286; //纬度$radius

67240
领券