最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java整合Redis實(shí)現(xiàn)坐標(biāo)附近查詢功能

 更新時(shí)間:2023年11月15日 10:56:49   作者:于京京9909  
這篇文章主要介紹了Java整合Redis實(shí)現(xiàn)坐標(biāo)附近查詢,我們可以在redis服務(wù)器使用命令 help xxx 查看指令的具體用法,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

一、GEO用法引入

  • GEO,全稱Geolocation,代表地理坐標(biāo)??梢栽谄渲写鎯?chǔ)地理坐標(biāo)信息,幫助我們根據(jù)經(jīng)緯度來檢索數(shù)據(jù)。常見的命令有:
  • GEOADD:添加一個(gè)或多個(gè)地理空間信息,包含:經(jīng)度(longitude)、緯度(latitude)、值(member)
  • GEODIST:計(jì)算指定的兩個(gè)點(diǎn)之間的距離并返回
  • GEOHASH:將指定member的坐標(biāo)轉(zhuǎn)為hash字符串形式并返回
  • GEOPOS:返回指定member的坐標(biāo)
  • GEORADIUS:指定圓心、半徑,找到該圓內(nèi)包含的所有member,并按照與圓心之間的距離排序后返回。(6.2以后已廢棄)
  • GEOSEARCH:在指定范圍內(nèi)搜索member,并按照與指定點(diǎn)之間的距離排序后返回。范圍可以是圓形或矩形。(6.2以后新命令)
  • GEOSEARCHSTORE:與GEOSEARCH功能一致,不過可以把結(jié)果存儲(chǔ)到一個(gè)指定的key。(6.2以后新命令)

我們可以在redis服務(wù)器使用命令 help xxx 查看指令的具體用法~

二、引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

三、實(shí)體類

1.返回實(shí)體

@Data
public class Geo<T> {
    private T object;
    private double distance;
}

2.添加的商戶信息 

 
@Data
@ApiModel("商戶信息DO")
public class CommercialDO implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(type = IdType.AUTO)
    /**
     * id
     */
    private Integer id;
    /**
     * 商戶名稱
     */
    private String name;
    /**
     * 商戶類型
     */
    private String commercialType;
    /**
     * 門店名稱
     */
    private String storeName;
    /**
     * 商戶地址
     */
    private String address;
    /**
     * 項(xiàng)目code
     */
    private String itemCode;
    /**
     * 經(jīng)度
     */
    private String longitude;
    /**
     * 緯度
     */
    private String latitude;
}

四、添加位置信息

    @ApiOperation("geo測(cè)試添加位置信息")
    @GetMapping("/geo/add")
    public String geoAdd(String key, double longitude, double latitude, CommercialDO commercialDO) throws Exception {
        redisUtils.geoAdd(key, longitude, latitude, commercialDO);
        return "添加成功";
    }
    public void geoAdd(String key, double longitude, double latitude, Object object) {
        redisTemplate.boundGeoOps(key).add(new Point(longitude, latitude),object);
    }

五、查詢位置信息

    /**
     * 根據(jù)經(jīng)緯度獲取指定距離范圍內(nèi)的地理位置信息
     *
     * @param key           Redis中Geo操作的key
     * @param longitude     經(jīng)度
     * @param latitude      緯度
     * @param distance      距離范圍(單位:米)
     * @param limit         限制返回結(jié)果的數(shù)量
     * @param searchName    地點(diǎn)名稱(可選)
     * @return              返回地理位置信息的列表
     */
    public List<Geo<T>> getNearbyByGeo(String key, double longitude, double latitude, int distance, int limit, String searchName) {
        List<Geo<T>> geos = new ArrayList<>();
        BoundGeoOperations boundGeoOperations = redisTemplate.boundGeoOps(key);
        Point point = new Point(longitude, latitude);
        Circle within = new Circle(point, distance);
        RedisGeoCommands.GeoRadiusCommandArgs geoRadiusArgs = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs();
        geoRadiusArgs = geoRadiusArgs.includeDistance();
        geoRadiusArgs.limit(limit);
        geoRadiusArgs.sortAscending();
        GeoResults<RedisGeoCommands.GeoLocation<Object>> geoResults = boundGeoOperations.radius(within, geoRadiusArgs);
        List<GeoResult<RedisGeoCommands.GeoLocation<Object>>> geoResultList = geoResults.getContent();
        if (StringUtils.isNotBlank(searchName)) {
            geoResultList = geoResults.getContent()
                    .stream()
                    .filter(result -> result.getContent().getName().toString().contains(searchName))
                    .collect(Collectors.toList());
        }
        Geo geo;
        for (GeoResult<RedisGeoCommands.GeoLocation<Object>> geoResult : geoResultList) {
            geo = new Geo();
            geo.setObject(geoResult.getContent());
            geo.setDistance(geoResult.getDistance().getValue());
            geos.add(geo);
        }
        return geos;
    }

 結(jié)果:會(huì)根據(jù)距離自動(dòng)排序,傳遞名稱則模糊查詢

到此這篇關(guān)于Java整合Redis實(shí)現(xiàn)坐標(biāo)附近查詢的文章就介紹到這了,更多相關(guān)Java整合Redis坐標(biāo)附近查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java統(tǒng)計(jì)代碼的執(zhí)行時(shí)間的N種方法

    Java統(tǒng)計(jì)代碼的執(zhí)行時(shí)間的N種方法

    在日常開發(fā)中經(jīng)常需要測(cè)試一些代碼的執(zhí)行時(shí)間,但又不想使用向 JMH(Java?Microbenchmark Harness,Java 微基準(zhǔn)測(cè)試套件)這么重的測(cè)試框架,所以本文就匯總了一些 Java 中比較常用的執(zhí)行時(shí)間統(tǒng)計(jì)方法,總共包含以下 6 種,需要的朋友可以參考下
    2022-08-08
  • Java 精煉解讀數(shù)據(jù)結(jié)構(gòu)邏輯控制

    Java 精煉解讀數(shù)據(jù)結(jié)構(gòu)邏輯控制

    在程序開發(fā)的過程之中一共會(huì)存在有三種程序邏輯:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),對(duì)于之前所編寫的代碼大部分都是順序結(jié)構(gòu)的定義,即:所有的程序?qū)凑斩x的代碼順序依次執(zhí)行
    2022-03-03
  • elasticsearch集群cluster示例詳解

    elasticsearch集群cluster示例詳解

    這篇文章主要為大家介紹了elasticsearch集群cluster示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • SpringBoot項(xiàng)目實(shí)現(xiàn)MyBatis流式查詢的教程詳解

    SpringBoot項(xiàng)目實(shí)現(xiàn)MyBatis流式查詢的教程詳解

    這篇文章主要介紹了SpringBoot項(xiàng)目如何實(shí)現(xiàn)MyBatis的流式查詢,mybatis的流式查詢,有點(diǎn)冷門,實(shí)際用的場(chǎng)景比較少,但是在某些特殊場(chǎng)景下,卻是十分有效的一個(gè)方法,感興趣的同學(xué)可以參考一下
    2023-06-06
  • Spring Boot 集成 Spring AI OpenAI Starter最佳實(shí)踐指南

    Spring Boot 集成 Spring AI OpenAI&nbs

    本教程詳細(xì)介紹了如何使用SpringBoot集成SpringAIOpenAIStarter,實(shí)現(xiàn)智能對(duì)話功能,包括基礎(chǔ)對(duì)話、帶上下文對(duì)話、高級(jí)參數(shù)控制、流式響應(yīng)以及提示詞工程,本文介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-12-12
  • Java enum的用法詳細(xì)介紹及實(shí)例代碼

    Java enum的用法詳細(xì)介紹及實(shí)例代碼

    這篇文章主要介紹了Java enum的用法詳細(xì)介紹及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • idea中的jvm調(diào)優(yōu)方式

    idea中的jvm調(diào)優(yōu)方式

    這篇文章主要介紹了idea中的jvm調(diào)優(yōu)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Installij IDEA install或clean項(xiàng)目的使用

    Installij IDEA install或clean項(xiàng)目的使用

    這篇文章主要介紹了Installij IDEA install或clean項(xiàng)目的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在

    mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在

    這篇文章主要介紹了mybatis批量添加,批量更新之前如何判斷是否已經(jīng)存在,具有很好的參考價(jià)值,希望對(duì)的有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • RocketMQ消息生產(chǎn)者是如何選擇Broker示例詳解

    RocketMQ消息生產(chǎn)者是如何選擇Broker示例詳解

    這篇文章主要為大家介紹了RocketMQ消息生產(chǎn)者是如何選擇Broker示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論

乐陵市| 绥滨县| 肃宁县| 那坡县| 台中市| 仁布县| 汝州市| 渭南市| 健康| 祁阳县| 繁峙县| 惠东县| 芮城县| 宝山区| 金溪县| 隆安县| 蒲江县| 佛学| 韩城市| 大同市| 平阳县| 海盐县| 遵化市| 静宁县| 库尔勒市| 平塘县| 临湘市| 孝义市| 西贡区| 江永县| 镶黄旗| 射洪县| 衡水市| 卓尼县| 双牌县| 花莲县| 东阳市| 六安市| 丽江市| 深水埗区| 安仁县|