SpringBoot整合Redis的GEO实现查找附近门店功能

本文介绍了如何利用GIS技术和Redis3.2版本后的GEO数据结构实现基于位置的附近服务,如商家推荐和用户查找附近门店。通过SpringBoot项目集成Redis,展示了如何存储商家位置信息、计算距离并提供实际应用案例,如用户查找附近美食功能的开发过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

像我们平常美团点外卖的时候,都会看到一个商家距离我们多少米。还有类似QQ附近的人,我们能看到附近的人距离我们有多少米。

在这里插入图片描述

那么这些业务是怎么做的呢?是如何实现 基于位置的附近服务系统呢。

在去了解基于位置的附近服务之前,我们先来看一下什么是GIS技术。

GIS代表地理信息系统,是一种用于收集、存储、分析、管理和显示地理空间数据的技术。GIS利用计算机软件和硬件来创建、管理、分析和可视化地理信息,使用户能够更好地了解和解决地理空间问题。

简言之地图上的每一个位置都会一个经纬度坐标。根据这个坐标我们查出来附近的人,或者附近的门店之类的。

下面是基于百度的地图经纬度定位系统,大家可以自己体验下,你给它一个经纬度,他能给你定位到地图的某一个点。也就是当前经纬度的位置。

网址:http://jingweidu.757dy.com/

在这里插入图片描述

我们既然了解了经纬度这个概念,那么Redis 3.2版本之后新增的一个数据类型,是一种用于处理地理位置信息的数据结构。

GEO(地理位置):存储和查询地理位置数据,并快速地计算距离和位置集合的交集。

应用场景

  • 位置服务:可以使用GEO结构存储用户或商家的位置信息,并计算用户或商家之间的距离。
  • 商业分析:可以使用GEO结构在地图上可视化商家的分布状况,以进行市场分析和营销策略的制定。
  • 推荐系统:可以使用GEO结构计算用户与商家之间的距离,以实现根据附近商家推荐和推荐商家位置排名等功能。或者用于实现拼团和卡券等代表性做法,诸如可以实现商家对距离自己较近的用户进行自动优惠券发放等。

Redis的GEO数据结构常见的命令

  • geoadd:增加某个地理位置的坐标
    • 语法 GEOADD key longitude latitude member
  • geopos:获取某个地理位置的坐标
    • 语法 GEOPOS key [member [member ...]]
  • geodist:获取两个地理位置的距离
    • 语法 GEODIST key member1 member2 [M | KM | FT | MI]
    • 范围单位:m | km | ft | mi --> 米 | 千米 | 英尺 | 英里
  • georadius:根据给定地理位置坐标获取指定范围内的地理位置集合
    • 语法 GEORADIUS key longitude latitude radius <M | KM | FT | MI>
  • georadiusbymember:根据给定地理位置获取指定范围内的地理位置集合。
    • 语法 GEORADIUSBYMEMBER key member radius <M | KM | FT | MI>
  • geohash:获取某个地理位置的geohash值
    • 语法 GEOHASH key [member [member ...]]

SpringBoot整合案例实战

需求背景:一个用户想要找他的附近美食,使用Redis的GEO结构。

SpringBoot项目整合RedisTemplate这里就不过多介绍啦。

<!-- 创建SpringBoot项目加入redis的starter依赖 -->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

首先我们要先准备一些商家信息,我们先定义一个商家的实体类。

/**
 * 定义商家店铺实体类
 * @author lixiang
 * @date 2023/6/21 09:31
 */
@Data
public class Shop {

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值