附近的人你zao吗

鍖椾含姝h娌荤枟鐧界櫆椋庡尰闄? https://baike.baidu.com/item/%E5%8C%97%E4%BA%AC%E4%B8%AD%E7%A7%91%E7%99%BD%E7%99%9C%E9%A3%8E%E5%8C%BB%E9%99%A2/9728824?fr=aladdin

前几天收到一个新的需求,需要实现类似“附近的人”的功能:根据自己当前的定位,获取距离范围内的所有任务地点。刚看到这个需求时有点懵逼,第一想到的就是要利用地球的半径公式去计算距离,也就是把地球想成一个球体,去计算球上两点之间的距离。可想而知,这样的方法效率会比较低,每条数据都要来与本人的坐标做计算,太过繁琐。经过大佬的指点,想到了用redis自带的GEO来实现此功能。

一、实战演习

以下是给大家准备的sql脚本

SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructureforjob_base_info------------------------------DROPTABLEIFEXISTS`job_base_info`;CREATETABLE`job_base_info`(`job_id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT任务ID,`job_name`varchar(50)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLCOMMENT任务名称,`job_location`varchar(50)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTCOMMENT任务地点位置经纬度-逗号隔开,`job_detail_address`varchar()CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLCOMMENT任务详细地点位置,PRIMARYKEY(`job_id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=24CHARACTERSET=utf8COLLATE=utf8_general_ciCOMMENT=工作任务详情基础信息表ROW_FORMAT=DYNAMIC;--------------------------------Recordsofjob_base_info------------------------------INSERTINTO`job_base_info`VALUES(1,软件开发,.,36.,青岛市崂山区海尔路1号);INSERTINTO`job_base_info`VALUES(2,儿童摄影,.,36.,山东省青岛市李沧区书院路号);INSERTINTO`job_base_info`VALUES(3,清洁家用电器,.,36.,山东省青岛市胶州市福州支路号东60米);INSERTINTO`job_base_info`VALUES(4,辩论学习,.,36.,松岭路号中国海洋大学内);SETFOREIGN_KEY_CHECKS=1;

废话不多说,让我们来看看具体的实现

(1)我们要在程序启动时,将数据库中的任务数据的坐标信息初始化到redis中(此处暂且忽略任务的增删改查对redis中数据的影响)

PostConstructpublicvoidinit(){//首先要删除该key的所有值redisTemplate.delete("

转载请注明:http://www.sonphie.com/jibzd/14230.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: