附近的人你zao吗

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

    • 没有热点文章

    推荐文章

    • 没有推荐文章