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

SpringBoot+Redis實(shí)現(xiàn)查找附近用戶(hù)的示例代碼

 更新時(shí)間:2024年02月03日 09:55:34   作者:帥龍之龍  
SpringDataRedis提供了十分簡(jiǎn)單的地理位置定位的功能,本文主要介紹了SpringBoot+Redis實(shí)現(xiàn)查找附近用戶(hù)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下

前言

簡(jiǎn)單記錄一下使用Redis的GEO命令,SpringDataRedis提供了十分簡(jiǎn)單的地理位置定位的功能,實(shí)現(xiàn)查找附近用戶(hù)的功能。

一、Redis的GEO命令之GEOADD、GEORADIUS命令

1.GEOADD 命令

(1)用法:GEOADD key [longitude][ latitude ][member]
(2)作用:用于存儲(chǔ)地理位置信息,以便進(jìn)行地理位置搜索和距離計(jì)算等操作。
(3)返回值:成功添加的成員數(shù)量。
(4)示例:

redis > GEOADD cities 116.4074 39.9042 Beijing
redis > GEOADD cities NX 121.4737 31.2304 Shanghai

(5)可選參數(shù):
- NX:只在 key 不存在時(shí)才執(zhí)行操作。
- XX:只在 key 存在時(shí)才執(zhí)行操作。
- CH:修改成功的成員數(shù)量將被返回

2.GEORADIUS 命令

(1)用法:GEORADIUS key longitude latitude radius
(2)作用:用于查詢(xún)指定地理位置附近的其他地理位置的命令。
(3)返回值:返回成員列表。
(4)示例:

redis > GEORADIUS User-Location 116.4074 39.9042 100 km

二、示例代碼

1.控制層

(1)UserController.java

/**
 * 更新用戶(hù)位置信息
 * {
 *     "longitude": 113.936099,
 *     "latitude": 22.542364
 * }
 */
@PostMapping("updateUserLocation")
@ResponseBody
@CrossOrigin
public <T> T updateUserLocation(@RequestBody HashMap<String, Object> data) {
    return userService.updateUserLocation(data);
}

/**
 * 更新用戶(hù)位置信息
 * {
 *     "longitude": 113.936099,
 *     "latitude": 22.542364,
 *     "radius": 10
 * }
 */
@PostMapping("nearby")
@ResponseBody
@CrossOrigin
public <T> T nearby(@RequestBody HashMap<String, Object> data) {
    return userService.nearby(data);
}

2.接口層

(1)IUserService.java

<T> T updateUserLocation(HashMap<String, Object> data);

<T> T nearby(HashMap<String, Object> data);

3.實(shí)現(xiàn)層

(1)UserServiceImpl.java

@Override
public <T> T updateUserLocation(HashMap<String, Object> data) {
    HashMap<String, Object> responseObj = new HashMap<>();
    // 獲取登錄用戶(hù)
    UserDTO userDTO = RequestHolder.getUser();

    // 獲取經(jīng)緯度
    Double longitude = (Double) data.get("longitude"); // 經(jīng)度
    Double latitude = (Double) data.get("latitude"); // 維度

    String USER_LOCATION_KEY = "User-Location";
    String phone = userDTO.getPhone();
    stringRedisTemplate.opsForGeo().add(USER_LOCATION_KEY, new Point(longitude, latitude), phone);
    responseObj.put("code", 200);
    responseObj.put("success", true);
    responseObj.put("msg", "更新完成");
    return (T) responseObj;
}

@Override
public <T> T nearby(HashMap<String, Object> data) {
    HashMap<String, Object> responseObj = new HashMap<>();
    // 獲取登錄用戶(hù)
    UserDTO userDTO = RequestHolder.getUser();

    // 獲取經(jīng)緯度,以及半徑
    Double longitude = (Double) data.get("longitude"); // 經(jīng)度
    Double latitude = (Double) data.get("latitude"); // 維度
    Integer radius = (Integer) data.get("radius"); // 半徑

    String USER_LOCATION_KEY = "User-Location";
    String phone = userDTO.getPhone();
    Distance distance = new Distance(radius, Metrics.KILOMETERS); // 距離,單位為千米
    Circle circle = new Circle(new Point(longitude, latitude), distance); // 圓心

    // 使用Redis的地理位置操作對(duì)象,在指定范圍內(nèi)查詢(xún)附近的用戶(hù)位置信息
    GeoResults<RedisGeoCommands.GeoLocation<String>> geoResults = stringRedisTemplate.opsForGeo().radius(USER_LOCATION_KEY, circle);
    List<Object> nearbyUsers = new ArrayList<>();
    for (GeoResult<RedisGeoCommands.GeoLocation<String>> geoResult : geoResults.getContent()) {
        Object memberId = geoResult.getContent().getName();
        // 排除查詢(xún)用戶(hù)本身
        if (!memberId.equals(phone)) {
            nearbyUsers.add(memberId);
        }
    }

    responseObj.put("code", 200);
    responseObj.put("success", true);
    responseObj.put("msg", "更新完成");
    responseObj.put("data", nearbyUsers);
    return (T) responseObj;
}

到此這篇關(guān)于SpringBoot+Redis實(shí)現(xiàn)查找附近用戶(hù)的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot Redis查找附近用戶(hù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java自動(dòng)化設(shè)置PowerPoint幻燈片背景顏色和背景圖片

    Java自動(dòng)化設(shè)置PowerPoint幻燈片背景顏色和背景圖片

    在日常工作中,PowerPoint?演示文稿是不可或缺的工具,本文將為你揭示如何通過(guò)Java,高效、專(zhuān)業(yè)地設(shè)置PowerPoint幻燈片的背景顏色和背景圖片,有需要的可以了解下
    2025-12-12
  • java編寫(xiě)一個(gè)花名隨機(jī)抽取器的實(shí)現(xiàn)示例

    java編寫(xiě)一個(gè)花名隨機(jī)抽取器的實(shí)現(xiàn)示例

    這篇文章主要介紹了java編寫(xiě)一個(gè)花名隨機(jī)抽取器的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Spring響應(yīng)式編程之Reactor操作符詳解

    Spring響應(yīng)式編程之Reactor操作符詳解

    文章介紹了Reactor庫(kù)中常用的響應(yīng)式流操作符,分為創(chuàng)建、轉(zhuǎn)換、組合、條件和錯(cuò)誤處理五類(lèi),詳細(xì)列舉了每類(lèi)操作符的功能和用途,這些操作符旨在提高響應(yīng)式流的可讀性和開(kāi)發(fā)效率,幫助開(kāi)發(fā)者更高效地處理數(shù)據(jù)流
    2025-09-09
  • 一篇文章帶你Java Spring開(kāi)發(fā)入門(mén)

    一篇文章帶你Java Spring開(kāi)發(fā)入門(mén)

    這篇文章主要為大家詳細(xì)介紹了Java Spring開(kāi)發(fā)入門(mén)學(xué)習(xí)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-09-09
  • Lombok的@Data等注解無(wú)效的解決

    Lombok的@Data等注解無(wú)效的解決

    這篇文章主要介紹了Lombok的@Data等注解無(wú)效的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • springboot動(dòng)態(tài)定時(shí)任務(wù)的實(shí)現(xiàn)方法示例

    springboot動(dòng)態(tài)定時(shí)任務(wù)的實(shí)現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于springboot動(dòng)態(tài)定時(shí)任務(wù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java實(shí)現(xiàn)將漢字轉(zhuǎn)化為漢語(yǔ)拼音的方法

    Java實(shí)現(xiàn)將漢字轉(zhuǎn)化為漢語(yǔ)拼音的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)將漢字轉(zhuǎn)化為漢語(yǔ)拼音的方法,實(shí)例演示了Java引用pinyin4j庫(kù)實(shí)現(xiàn)漢子轉(zhuǎn)化成拼音的使用技巧,需要的朋友可以參考下
    2015-12-12
  • JavaWeb實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)數(shù)據(jù)的添加和刪除

    JavaWeb實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)數(shù)據(jù)的添加和刪除

    這篇文章主要介紹了如何利用JavaWeb實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)數(shù)據(jù)的添加和刪除功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-03-03
  • @Transactional注解異常報(bào)錯(cuò)之多數(shù)據(jù)源詳解

    @Transactional注解異常報(bào)錯(cuò)之多數(shù)據(jù)源詳解

    這篇文章主要介紹了@Transactional注解異常報(bào)錯(cuò)之多數(shù)據(jù)源詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 使用IDEA創(chuàng)建SpringBoot項(xiàng)目

    使用IDEA創(chuàng)建SpringBoot項(xiàng)目

    本文詳細(xì)介紹了使用SpringBoot創(chuàng)建項(xiàng)目,包含配置、啟動(dòng)、開(kāi)發(fā)環(huán)境配置等,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12

最新評(píng)論

荔浦县| 佛山市| 子洲县| 商洛市| 连城县| 鱼台县| 广德县| 张掖市| 河源市| 遵义市| 龙口市| 金昌市| 临漳县| 金坛市| 四子王旗| 横山县| 增城市| 都江堰市| 林口县| 磴口县| 隆昌县| 长泰县| 隆德县| 南宫市| 林西县| 承德县| 汉川市| 昌宁县| 门头沟区| 宁城县| 两当县| 陵水| 忻州市| 三亚市| 临朐县| 阿坝| 吉木乃县| 渝中区| 紫阳县| 兰西县| 墨玉县|