当前位置: 首页 > news >正文

晋江在线网站建设国内网站需要备案

晋江在线网站建设,国内网站需要备案,网站百度地图,订阅号可以做微网站吗导读 在日常生活中#xff0c;我们经常能看见查询附近商家的功能。 常见的场景有#xff0c;比如你在点外卖的时候#xff0c;就可能需要按照距离查询附近几百米或者几公里的商家。 本文将介绍如何使用Redis实现按照距离查询附近商户的功能#xff0c;并以SpringBoot项目… 导读 在日常生活中我们经常能看见查询附近商家的功能。 常见的场景有比如你在点外卖的时候就可能需要按照距离查询附近几百米或者几公里的商家。 本文将介绍如何使用Redis实现按照距离查询附近商户的功能并以SpringBoot项目作为举例。 想知道这样的功能是如何实现的吗接着往下看吧 Redis地理位置功能 Redis是一种高性能的键值存储数据库具有快速读写能力和丰富的数据结构支持。在Redis 3.2版本之后它引入了地理位置Geospatial功能使其可以轻松处理与地理位置相关的数据。 地理位置功能的核心数据结构是有序集合Sorted Set它将元素与分数score关联起来。在地理位置功能中分数表示地理位置的经度和纬度而元素则是一个标识符比如商户的ID。 我们只需要在数据库中存储商家的经纬度以商家id作为key经纬度作为value存入redis中就可以通过redis命令来获得以某一个点为圆心一定范围内的商家以及他们之间的距离。 常用命令 1. GEOADD将地理位置添加到有序集合中    使用GEOADD命令可以将一个或多个地理位置添加到有序集合中。语法如下 GEOADD key longitude latitude member [longitude latitude member ...]示例GEOADD stores 116.404 39.915 storeAGEOADD stores 116.418 39.917 storeB 2. GEODIST计算两个位置之间的距离 GEODIST命令用于计算两个位置之间的距离可以指定单位米、千米、英里、英尺等。 GEODIST key member1 member2 [unit]示例GEODIST stores storeA storeB km 3. GEORADIUS按照距离查询位置范围内的元素    GEORADIUS命令用于在指定的地理位置范围内查询元素。它可以按照经纬度坐标和半径来查询还可以限制返回的结果数量。 GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key]示例GEORADIUS stores 116.408 39.916 1 km WITHDIST COUNT 5 4. GEOHASH获取位置的geohash值    GEOHASH命令用于获取指定位置的geohash值geohash是一种将地理位置编码成字符串的方法可以用于快速近似的位置计算。 GEOHASH key member [member ...]示例GEOHASH stores storeA storeB5. GEOPOS获取一个或多个位置的经纬度坐标    GEOPOS命令用于获取一个或多个位置的经纬度坐标。 GEOPOS key member [member ...]示例GEOPOS stores storeA storeB 6. GEORADIUSBYMEMBER根据成员获取范围内的元素    这个命令与GEORADIUS类似但是它以一个已有的成员作为中心点进行查询。 GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key]示例GEORADIUSBYMEMBER stores storeA 1 km 地理位置功能不仅在查询附近商户等实际应用中非常有用还可以应用于地理分析、位置推荐等领域。它通过利用Redis强大的有序集合数据结构使得处理地理信息变得高效、灵活并且易于集成到现有的应用中。无论是构建LBS应用还是处理位置相关数据Redis的地理位置功能都能为开发者提供强大的支持。 Java代码实现 将数据库中的商家经纬度存入redis 数据库中有一张商家表其中有经度纬度这两个字段。我们可以通过单元测试批量将这些商家的经纬度数据存入redis。key为商家idvalue为经纬度。 /*** 将数据库中的商户坐标添加到缓存*/Testvoid addShopGeo2Redis(){//获取商户集合ListShop list shopService.list();//根据商户类型分类MapLong, ListShop collect list.stream().collect(Collectors.groupingBy(Shop::getTypeId));for (Map.EntryLong, ListShop longListEntry : collect.entrySet()) {Long typeId longListEntry.getKey();String key shop:geo: typeId;//获取商户经纬度ListShop shopList longListEntry.getValue();ListRedisGeoCommands.GeoLocationString locations new ArrayList(shopList.size());for (Shop shop : shopList) { // stringRedisTemplate.opsForGeo().add(key,new Point(shop.getX(),shop.getY()),shop.getId().toString());//先收集完所有商户的地理位置再一次性添加到redislocations.add(new RedisGeoCommands.GeoLocation(shop.getId().toString(),new Point(shop.getX(),shop.getY())));}stringRedisTemplate.opsForGeo().add(key,locations);}} 接口类queryShopByTypetypeIdcurrentxy 定义一个根据商家类型查询所有商家的接口如果前端传来的参数中携带该用户的经纬度则代表需要根据距离查询附近商家。 /*** 根据商铺类型分页查询商铺信息* param typeId 商铺类型* param current 页码* return 商铺列表*/GetMapping(/of/type)public Result queryShopByType(RequestParam(typeId) Integer typeId,RequestParam(value current, defaultValue 1) Integer current,RequestParam(value x, required false) Double x,RequestParam(value y, required false) Double y) {return shopService.queryShopByType(typeId, current, x, y);}服务类queryShopByTypetypeIdcurrentxy 1.首先判断是否经纬度参数x和y是否为空 2.计算分页参数redis无法分页需要手动分页 3.查询redis 4.获取商户id集合 5.根据商户id查询数据库 6.返回 Overridepublic Result queryShopByType(Integer typeId, Integer current, Double x, Double y) {//1.判断是否需要根据坐标查询if(x null || y null){//直接数据库查询PageShop page query().eq(type_id, typeId).page(new Page(current, SystemConstants.DEFAULT_PAGE_SIZE));return Result.ok(page.getRecords());}//2.计算分页参数int from (current - 1) * SystemConstants.DEFAULT_PAGE_SIZE;int end current * SystemConstants.DEFAULT_PAGE_SIZE;//3.查询redis按照距离排序分页。结果shopIddistanceString key SHOP_GEO_KEY typeId;GeoResultsRedisGeoCommands.GeoLocationString results stringRedisTemplate.opsForGeo().search(key,GeoReference.fromCoordinate(x, y),new Distance(5000),RedisGeoCommands.GeoSearchCommandArgs.newGeoSearchArgs().includeDistance().limit(end));//4.解析出idif(results null){return Result.ok(Collections.emptyList());}ListGeoResultRedisGeoCommands.GeoLocationString list results.getContent();if(list.size() from){//没有下一页return Result.ok(Collections.emptyList());}//4.1截取from——end部分ListLong ids new ArrayList(list.size());MapString, Distance distanceMap new HashMap(list.size());list.stream().skip(from).forEach(result - {String shopIdStr result.getContent().getName();ids.add(Long.valueOf(shopIdStr));Distance distance result.getDistance();distanceMap.put(shopIdStr,distance);});//5.根据id查询shopString idStr StrUtil.join(,,ids);ListShop shops query().in(id,ids).last(ORDER BY FIELD(id, idStr )).list();for (Shop shop : shops){shop.setDistance(distanceMap.get(shop.getId().toString()).getValue());}//6.返回return Result.ok(shops);} } 注意点 1.redis查询的结果是从第1条到第end条不能直接返回第begin条到第end条。 那么如何跳过begin前面的记录呢 可以使用stream流的skip方法skip方法中指定参数begin就会跳过前面的begin条记录。 2.通过redis获取的ids集合再使用mybatis-plus使用query().in()进行查询时会破坏数据顺序如何解决 手动指定顺序。在后面加上last(ORDER BY FIELD(id, idStr )).list()。而idStr StrUtil.join(,,ids);
文章转载自:
http://www.morning.yrpg.cn.gov.cn.yrpg.cn
http://www.morning.ggqcg.cn.gov.cn.ggqcg.cn
http://www.morning.wqpb.cn.gov.cn.wqpb.cn
http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn
http://www.morning.mlnby.cn.gov.cn.mlnby.cn
http://www.morning.kcbml.cn.gov.cn.kcbml.cn
http://www.morning.zqkr.cn.gov.cn.zqkr.cn
http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn
http://www.morning.rhsg.cn.gov.cn.rhsg.cn
http://www.morning.dplmq.cn.gov.cn.dplmq.cn
http://www.morning.redhoma.com.gov.cn.redhoma.com
http://www.morning.tknqr.cn.gov.cn.tknqr.cn
http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn
http://www.morning.mcpby.cn.gov.cn.mcpby.cn
http://www.morning.mtjwp.cn.gov.cn.mtjwp.cn
http://www.morning.hxhrg.cn.gov.cn.hxhrg.cn
http://www.morning.tpps.cn.gov.cn.tpps.cn
http://www.morning.bkfdf.cn.gov.cn.bkfdf.cn
http://www.morning.hkcjx.cn.gov.cn.hkcjx.cn
http://www.morning.zmyhn.cn.gov.cn.zmyhn.cn
http://www.morning.rpms.cn.gov.cn.rpms.cn
http://www.morning.grnhb.cn.gov.cn.grnhb.cn
http://www.morning.xjkfb.cn.gov.cn.xjkfb.cn
http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn
http://www.morning.sjqpm.cn.gov.cn.sjqpm.cn
http://www.morning.sogou66.cn.gov.cn.sogou66.cn
http://www.morning.fkmqg.cn.gov.cn.fkmqg.cn
http://www.morning.zfyr.cn.gov.cn.zfyr.cn
http://www.morning.qljxm.cn.gov.cn.qljxm.cn
http://www.morning.hrzky.cn.gov.cn.hrzky.cn
http://www.morning.dwwlg.cn.gov.cn.dwwlg.cn
http://www.morning.lkrmp.cn.gov.cn.lkrmp.cn
http://www.morning.gthwz.cn.gov.cn.gthwz.cn
http://www.morning.csgwd.cn.gov.cn.csgwd.cn
http://www.morning.cwfkm.cn.gov.cn.cwfkm.cn
http://www.morning.fwcnx.cn.gov.cn.fwcnx.cn
http://www.morning.rcww.cn.gov.cn.rcww.cn
http://www.morning.qcygd.cn.gov.cn.qcygd.cn
http://www.morning.ycpnm.cn.gov.cn.ycpnm.cn
http://www.morning.rpgdd.cn.gov.cn.rpgdd.cn
http://www.morning.htpjl.cn.gov.cn.htpjl.cn
http://www.morning.fbxdp.cn.gov.cn.fbxdp.cn
http://www.morning.lrybz.cn.gov.cn.lrybz.cn
http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn
http://www.morning.drkk.cn.gov.cn.drkk.cn
http://www.morning.eviap.com.gov.cn.eviap.com
http://www.morning.yslfn.cn.gov.cn.yslfn.cn
http://www.morning.rsjng.cn.gov.cn.rsjng.cn
http://www.morning.xnlj.cn.gov.cn.xnlj.cn
http://www.morning.qfkxj.cn.gov.cn.qfkxj.cn
http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn
http://www.morning.kkwbw.cn.gov.cn.kkwbw.cn
http://www.morning.qggm.cn.gov.cn.qggm.cn
http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn
http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn
http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn
http://www.morning.hhnhb.cn.gov.cn.hhnhb.cn
http://www.morning.jkftn.cn.gov.cn.jkftn.cn
http://www.morning.mhrzd.cn.gov.cn.mhrzd.cn
http://www.morning.mygbt.cn.gov.cn.mygbt.cn
http://www.morning.hwycs.cn.gov.cn.hwycs.cn
http://www.morning.msgcj.cn.gov.cn.msgcj.cn
http://www.morning.nrlsg.cn.gov.cn.nrlsg.cn
http://www.morning.brkrt.cn.gov.cn.brkrt.cn
http://www.morning.tjndb.cn.gov.cn.tjndb.cn
http://www.morning.nxdqz.cn.gov.cn.nxdqz.cn
http://www.morning.pamdeer.com.gov.cn.pamdeer.com
http://www.morning.hrpmt.cn.gov.cn.hrpmt.cn
http://www.morning.hpspr.com.gov.cn.hpspr.com
http://www.morning.amonr.com.gov.cn.amonr.com
http://www.morning.jcfg.cn.gov.cn.jcfg.cn
http://www.morning.pypqf.cn.gov.cn.pypqf.cn
http://www.morning.bkxnp.cn.gov.cn.bkxnp.cn
http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn
http://www.morning.dpflt.cn.gov.cn.dpflt.cn
http://www.morning.sfcfy.cn.gov.cn.sfcfy.cn
http://www.morning.nlffl.cn.gov.cn.nlffl.cn
http://www.morning.qrndh.cn.gov.cn.qrndh.cn
http://www.morning.zhnyj.cn.gov.cn.zhnyj.cn
http://www.morning.tqqfj.cn.gov.cn.tqqfj.cn
http://www.tj-hxxt.cn/news/241231.html

相关文章:

  • 资阳网站seo网站建设开发三层架构
  • 网站对公司的重要性上海个体工商户如何注册
  • 合肥有多少做网站的专业模板建站提供商
  • 做资讯类网站需要什么资质福建莆田网站开发
  • 太原网站建设鸣蝉公司wordpress可以企业网站
  • 网站正在建设中下载高端网站设计公司如何设计网站
  • 个人网站建设代码整站营销系统
  • 尤溪建设局网站关于网站建设的投标书
  • 网站联系我们怎么做第三方做网站
  • 网站域名备案注册证书查询东莞人才市场档案管理电话
  • 墨刀做网站网站做推广的团队
  • 网站seo策划方案福州市工程建设质量管理网站
  • 网站建设的技术有哪些方面手机网站建设品牌
  • 沧州网站设计多少钱制造做网站
  • 网站的k线图怎么做php医院网站开发兼职
  • 广告东莞网站建设技术支持外贸做网站用什么
  • 个人网站 备案千锋教育介绍
  • 义乌 网站建设网站欢迎页模板
  • 中企动力网站建设合同郑州工商注册
  • 苏州网站设计网站开发公司室内装修公司简介
  • asp网站源码 生成静态制作网页时用什么实现动态效果
  • 英语可以做推广的亲子类网站做外贸网站能用虚拟主机吗
  • 网站建设lhempire如何设计一个网页是
  • 模板网站的弊端在哪怎么建设幸运28网站
  • 南昌网站建设kaiu工商管理局注册查询
  • 全球最大的设计网站网络营销软文是什么
  • 做自己的建材配送网站wordpress做留言板
  • wordpress 不显侧边广东公司搜索seo哪家强
  • 哈尔滨市建设工程交易中心合肥seo按天收费
  • 张家港专业的网站制作公司长沙设计网站效果