springboot controller 分页查询_Spring Boot实战分页查询附近的人: Redis+GeoHash+Lua

  • 您的支持是我不断创作巨大动力

    • CSDN博客地址(关注,点赞)

    • 人工智能推荐

    • GitHub(Star,Fork,Watch)

前言

最近在做社交的业务,用户进入首页后需要查询附近的人;

项目状况:前期尝试业务阶段;

特点:

  • 快速实现(不需要做太重,满足初期推广运营即可)

  • 快速投入市场去运营

收集用户的经纬度:

  • 用户在每次启动时将当前的地理位置(经度,维度)上报给后台

提到附近的人,脑海中首先浮现特点:

  • 需要记录每位用户的经纬度

  • 查询当前用户附近的人,搜索在N公里内用户

架构设计

  • 时序图

    54e000f05f9f1e8f36d68c9479335afc.png
    在这里插入图片描述
  • 技术实现方案

    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客户端查看效果:

    085f83b2dde98efeefda780c9028ab70.png
    在这里插入图片描述
  • 查找距当前用户由近到远附近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
  • 命令执行效果如下:

    1aaeb2ccf10504202234a0b7806e035c.png
    在这里插入图片描述
  • 如何实现分页查询那?

  • 每次分页查询的请求都计算一次然后拿到程序中在取相应的分页数据,优缺点:

    • 优点:实现简单,无需额外的存储空间

    • 缺点:当用户量大时,很显然不仅效率低,而且容易把程序的内存搞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值