您的支持是我不断创作巨大动力
CSDN博客地址(关注,点赞)
人工智能推荐
GitHub(Star,Fork,Watch)
前言
最近在做社交的业务,用户进入首页后需要查询附近的人;
项目状况:前期尝试业务阶段;
特点:
快速实现(不需要做太重,满足初期推广运营即可)
快速投入市场去运营
收集用户的经纬度:
用户在每次启动时将当前的地理位置(经度,维度)上报给后台
提到附近的人,脑海中首先浮现特点:
需要记录每位用户的经纬度
查询当前用户附近的人,搜索在N公里内用户
架构设计
时序图
在这里插入图片描述 技术实现方案
SpringBoot
Redis(version>=3.2)
Redis原生命令实现
存入用户的经纬度
geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中
命令格式:
GEOADD key longitude latitude member [longitude latitude member ...]
模拟五个用户存入经纬度,redis客户端执行如下命令:
GEOADD zhgeo 116.48105 39.996794 zhangsan
GEOADD zhgeo 116.514203 39.905409 lisi
GEOADD zhgeo 116.489033 40.007669 wangwu
GEOADD zhgeo 116.562108 39.787602 sunliu
GEOADD zhgeo 116.334255 40.027400 zhaoqi通过redis客户端查看效果:
在这里插入图片描述 查找距当前用户由近到远附近100km用户
georadiusbymember可以找出位于指定范围内的元素,georadiusbymember 的中心点是由给定的位置元素决定的
命令格式:
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
模拟查找100km里距离sunliu由近到远五个人
georadiusbymember zhgeo sunliu 100 km asc count 5
命令执行效果如下:
在这里插入图片描述 如何实现分页查询那?
每次分页查询的请求都计算一次然后拿到程序中在取相应的分页数据,优缺点:
优点:实现简单,无需额外的存储空间
缺点:当用户量大时,很显然不仅效率低,而且容易把程序的内存搞