日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

面试突击第 3 期 | Redis 如何实现查询附近的人?视频实战版

發(fā)布時(shí)間:2025/3/11 数据库 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试突击第 3 期 | Redis 如何实现查询附近的人?视频实战版 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是我的第?33?篇原創(chuàng)文章

作者 |?王磊?(javacn666)

1 面試問(wèn)題

Redis 如何實(shí)現(xiàn)查詢附近的人?

2 相關(guān)面試問(wèn)題

  • Redis 中如何操作位置信息?

  • GEO 底層是如何實(shí)現(xiàn)的?

  • 如何在程序?qū)崿F(xiàn)查詢附近的人?

  • 在實(shí)際使用中需要注意哪些問(wèn)題?

3 相關(guān)答案

Redis 中要實(shí)現(xiàn)查詢附近的人,需要使用 Redis 3.2 版本中提供的 GEO 數(shù)據(jù)類型,它包含以下幾個(gè)重要的方法:

  • GEOADD 添加元素位置信息;

  • GEOPOS 查詢?cè)亟?jīng)緯度信息;

  • GEODIST 查詢兩個(gè)元素的直線距離;

  • GEORADIUS 查詢附近一定距離內(nèi)的元素信息。

  • 首先我們可以使用百度提供的經(jīng)緯度查詢工具來(lái)確定位置信息,地址:我們先用百度地圖提供的經(jīng)緯度查詢工具,地址:http://api.map.baidu.com/lbsapi/getpoint/index.html

    命令使用詳見(jiàn)視頻部分。

    3 視頻演示

    視頻內(nèi)容如下:

    4 代碼實(shí)戰(zhàn)

    下面我們用 Java 代碼,來(lái)實(shí)現(xiàn)查詢附近的人,完整代碼如下:

    import redis.clients.jedis.GeoCoordinate; import redis.clients.jedis.GeoRadiusResponse; import redis.clients.jedis.GeoUnit; import redis.clients.jedis.Jedis;import java.util.HashMap; import java.util.List; import java.util.Map;public class GeoHashExample {public static void main(String[] args) {Jedis jedis = new Jedis("127.0.0.1", 6379);Map<String, GeoCoordinate> map = new HashMap<>();// 添加小明的位置map.put("xiaoming", new GeoCoordinate(116.404269, 39.913164));// 添加小紅的位置map.put("xiaohong", new GeoCoordinate(116.36, 39.922461));// 添加小美的位置map.put("xiaomei", new GeoCoordinate(116.499705, 39.874635));// 添加小二map.put("xiaoer", new GeoCoordinate(116.193275, 39.996348));jedis.geoadd("person", map);// 查詢小明和小紅的直線距離System.out.println("小明和小紅相距:" + jedis.geodist("person", "xiaoming","xiaohong", GeoUnit.KM) + " KM");// 查詢小明附近 5 公里的人List<GeoRadiusResponse> res = jedis.georadiusByMemberReadonly("person", "xiaoming",5, GeoUnit.KM);for (int i = 1; i < res.size(); i++) {System.out.println("小明附近的人:" + res.get(i).getMemberByString());}} }

    以上程序執(zhí)行的結(jié)果如下:

    小明和小紅相距:3.9153 KM

    小明附近的人:xiaohong

    5 總結(jié)

    GEO 是 Redis ?3.2 版本中引入的功能,只有升級(jí)到 3.2+ 才能使用,GEO 本質(zhì)上是基于 ZSet 實(shí)現(xiàn)的,這點(diǎn)在 Redis 源碼找到相關(guān)信息,我們可以 GEO 使用實(shí)現(xiàn)查找附近的人或者附近的地點(diǎn),還可以用它來(lái)計(jì)算兩個(gè)位置相隔的直線距離。

    【END】

    近期熱文

    ?
    • 面試突擊第 2 期?| Redis 是如何處理已過(guò)期元素的?視頻版

    • 面試突擊第 1 期 | Redis 如何從海量數(shù)據(jù)中查詢出某一個(gè) Key?視頻版

    • 面試珍藏:最常見(jiàn)的200多道Java面試題(2019年最新版)

    • Java面試詳解(2020版):500+ 面試題和核心知識(shí)點(diǎn)詳解

    關(guān)注下方二維碼,訂閱更多精彩內(nèi)容

    朕已閱?

    總結(jié)

    以上是生活随笔為你收集整理的面试突击第 3 期 | Redis 如何实现查询附近的人?视频实战版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。