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

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

实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...「宅男」登陆 app获取「心动女生」的时候,app根据「宅男」的经纬度查找附近的「女神」。 获取到位置符合的「女神」ID 列表后,再从数据库获取 ID 对应的「女神」信息返回用户。...” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度和纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...,如何查找以这个经纬度为中心的一定范围内的其他用用户呢?...” Redis GEO类型提供了 GEORADIUS指令:会根据输入的经纬度位置,查找以这个经纬度为中心的一定范围内的其他元素。

1.7K10

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

实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...「宅男」登陆 app获取「心动女生」的时候,app根据「宅男」的经纬度查找附近的「女神」。 获取到位置符合的「女神」ID 列表后,再从数据库获取 ID 对应的「女神」信息返回用户。...” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度和纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...,如何查找以这个经纬度为中心的一定范围内的其他用用户呢?...” Redis GEO类型提供了 GEORADIUS指令:会根据输入的经纬度位置,查找以这个经纬度为中心的一定范围内的其他元素。

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

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

    实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...「宅男」登陆 app获取「心动女生」的时候,app根据「宅男」的经纬度查找附近的「女神」。 获取到位置符合的「女神」ID 列表后,再从数据库获取 ID 对应的「女神」信息返回用户。...” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度和纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...,如何查找以这个经纬度为中心的一定范围内的其他用用户呢?...” Redis GEO类型提供了 GEORADIUS指令:会根据输入的经纬度位置,查找以这个经纬度为中心的一定范围内的其他元素。

    1.2K50

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

    如打车服务: 每辆网约车都有个编号(如666),网约车需将自己的经度、纬度发给叫车应用 打车时,打车应用会根据用户的经纬度位置,查找用户的附近车辆,并匹配 等把位置相近的用户和车辆匹配后,打车应用就会根据车辆编号...字符串越长,表示的范围越精确。 GEOPOS 从key里返回所有给定位置元素的位置(经度和纬度)。...通过以下两个参数, 用户可以指定被返回位置元素的排序方式: ASC 根据中心的位置, 按照从近到远的方式返回位置元素。 DESC 根据中心的位置, 按照从远到近的方式返回位置元素。...GEORADIUS 使用输入的经度和纬度来决定中心点 指定成员的位置被用作查询的中心 使用GEOADD添加地理位置信息时,用标准格式的参数 x,y, 所以经度必须在纬度之前。...如LBS应用执行下面命令: # 根据输入的用户经纬度信息,查找以该经纬度为中心的5公里内车辆信息,返回给LBS应用 GEORADIUS cars:locations 116.054579 39.030452

    1.3K20

    交友系统设计:哪种地理空间邻近算法更快?

    1、需求分析 Liao 的客户端是一个移动 App,用户打开 App 后,上传、编辑自己的基本信息,然后系统(推荐算法)根据其地理位置和个人信息,为其推荐位置邻近的用户。...3、详细设计 详细设计主要关注邻近位置算法,也就是,如何根据用户的地理位置寻找距其一定范围内的其他用户。...1、SQL 邻近算法 我们可以将用户经、纬度直接记录到数据库中,纬度记录在 latitude 字段,经度记录在longitude 字段,用户当前的纬度和经度为 X,Y,如果我们想要查找和当前用户经、纬度距离...实际上,通过恰当地选择网格的大小,我们不停访问当前用户位置周边的网格就可以由近及远不断得到邻近的其他用户,而不需要再通过 SQL 来得到。那么如何选择网格大小?如何根据用户位置得到其所在的网格?...如果根节点不是叶子节点,那么根据给定的经、纬度判断其在网格中的位置,左上、右上、右下、左下,4 个位置,顺序对应 4 个子树,根据网格位置访问对应的子树。

    24710

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

    常用命令 # 存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。...] # 从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。 GEOPOS key member [member ......] # 返回两个给定位置之间的距离。 GEODIST key member1 member2 [m|km|ft|mi] # 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。...,介绍下具体如何使用 GEO 命令:GEOADD 和 GEORADIUS 这两个命令。...例如,LBS 应用执行下面的命令时,Redis 会根据输入的用户的经纬度信息(116.054579,39.030452 ),查找以这个经纬度为中心的 5 公里内的车辆信息,并返回给 LBS 应用。

    39340

    redis常用命令和数据类型

    语法: geoadd key 经度 纬度 地名 经度 纬度 地名 ... ... 2、geopos:获取地理位置的坐标(经度,纬度) geopos key 地名 3、geodist:计算两个位置之间的距离...单位可以是:m、km、mi(英里)、ft(英尺) geodist key 地名1 地名2 单位 4、georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。...WITHCOORD: 将位置元素的经度和纬度也一并返回。 WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。...DESC: 查找结果根据从远到近排序 5、georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。...georadiusbymember 和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点

    90710

    Redis高级篇之GEO搜索最近地铁口

    它支持对地理位置进行半径搜索、矩形搜索和附近点搜索等多种操作,可以用于实现诸如查找最近地铁口等功能。本文将介绍如何使用Redis的GEO数据结构来实现最近地铁口的搜索。...都知道地球上的地理位置是使用二维的经纬度表示,经度范围(-180,180],纬度范围(-90,90],只要我们确定一个点的经纬度就可以得他在地球的位置。...哈希表用于存储地理位置的元数据,例如地点名称、地址等;有序集合用于存储地理位置的坐标信息,例如经度和纬度。坐标编码GEO数据结构使用经纬度表示地理位置的坐标信息。...经纬度是一种常用的地理坐标系统,它使用经度和纬度来表示地球上的位置。在GEO数据结构中,经度和纬度被编码为一个64位的整数,以便进行高效的计算和比较。...跳表是一种基于链表的数据结构,它可以实现快速的查找、插入和删除操作。在GEO数据结构中,跳表被用于存储地理位置的坐标信息,以便进行高效的搜索和排序。

    59732

    Redis GeoHash核心原理解析

    饱暖思yin欲的麦叔饭后思考地图后台如何根据自己所在位置查询来查询附近餐馆的呢?苦思冥想了半天,小麦想出了个方法:计算所在位置P与北京所有餐馆的距离,然后返回距离的餐馆。...但是对于空间上的一个点(二维,包括经度和纬度),如何排序呢?又如何索引呢?解决的方法很多,下文介绍一种方法来解决这一问题。...GeoHash算法的步骤 下面以北海公园附近随便一个位置为例介绍GeoHash算法的计算步骤,先用百度 GPS反定位系统查找看下经纬度。 ? 纬度=116.395371,经度=39.931957。...每个POI都有经纬度信息,用图1b的SQL语句在mySQL中建立了POI_spatial的表,其中lat和lng两个字段来代表纬度和经度。为后续分析方便起见,我人造了40万个POI数据。...根据这个思路我们执行SQl查询(图5)(注:经度或纬度每隔0.001度,距离相差约100米,由此推算出矩形左下角和右上角坐标),发现过滤后正好剩下两个POI。

    1.6K20

    如何高效率地实现它?

    具体在产品技术上的实现原理,也很容易理解: 1)现在移动端(ios、android等),通过系统的API很容易抓到用户当前的位置(即经纬度数据); 2)根据第1步中的经纬度数据,很容易计算出两个点之间的距离...Redis Geo模块的6个指令用途说明: 1)GEOADD:将给定的位置对象(纬度、经度、名字)添加到指定的key; 2)GEOPOS:从key里面返回所有给定位置对象的位置(经度和纬度); 3...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    1.9K00

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

    Redis Geo 模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...将给定的位置对象(纬度、经度、名字)添加到指定的key。其中,key为集合名称,member为该经纬度所对应的对象。...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    26840

    Redis 7的地理信息命令太太太牛了!一文教你如何使用

    这些命令使用经度和纬度坐标表示地理位置,并提供了各种功能,如存储位置、计算距离、查找附近的位置等。下面是Redis 7中常用的地理信息命令: GEOADD:将指定的地理位置添加到指定的键中。...GEORADIUS:根据指定的位置和距离,在指定的键中查找附近的位置。 GEORADIUSBYMEMBER:根据指定的位置成员和距离,在指定的键中查找附近的位置。...GEORADIUS GEORADIUS命令用于根据指定的位置和距离,在指定的键中查找附近的位置。...BYBOX width height unit:根据矩形区域进行搜索。 WITHCOORD:返回位置的经度和纬度。 WITHDIST:返回位置与查询点的距离。...GEORADIUS命令可以根据指定的位置和距离,在指定的键中查找附近的位置。类似地,GEORADIUSBYMEMBER命令允许根据指定的位置成员和距离进行搜索。

    48030

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

    Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...将给定的位置对象(纬度、经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    1.2K10

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

    Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...将给定的位置对象(纬度、经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    92850

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

    Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...将给定的位置对象(纬度、经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    94230

    GeoHash核心原理解析

    某一天机机到北海公园游玩,肚肚饿了,于是乎打开手机地图,搜索北海公园附近的餐馆,并选了其中一家用餐。 ?   饭饱之后机机开始反思了,地图后台如何根据自己所在位置查询来查询附近餐馆的呢?...但是对于空间上的一个点(二维,包括经度和纬度),如何排序呢?又如何索引呢?解决的方法很多,下文介绍一种方法来解决这一问题。   ...也就是说,这个矩形区域内所有的点(经纬度坐标)都共享相同的GeoHash字符串,这样既可以保护隐私(只表示大概区域位置而不是具体的点),又比较容易做缓存,比如左上角这个区域内的用户不断发送位置信息请求餐馆数据...城区 郊区 通过上面的介绍我们知道了GeoHash就是一种将经纬度转换成字符串的方法,并且使得在大部分情况下,字符串前缀匹配越多的距离越近,回到我们的案例,根据所在位置查询来查询附近餐馆时,只需要将所在位置经纬度转换成...三、GeoHash算法   上文讲了GeoHash的计算步骤,仅仅说明是什么而没有说明为什么?为什么分别给经度和维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。

    1.3K30

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

    Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...将给定的位置对象(纬度、经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    98120

    Redis 实现「附近的人」

    Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...将给定的位置对象(纬度、经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    72720

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

    Redis Geo模块包含了以下6个命令: GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...将给定的位置对象(纬度、经度、名字)添加到指定的key。 其中,key为集合名称,member为该经纬度所对应的对象。...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    1.9K20
    领券