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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用 Redis 如何实现查询附近的人?「视频版」——面试突击 003 期

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

面試問題

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

涉及知識點

  • Redis 中如何操作位置信息?
  • GEO 底層是如何實現(xiàn)的?
  • 如何在程序實現(xiàn)查詢附近的人?
  • 在實際使用中需要注意哪些問題?
  • 視頻答案

    視頻地址:https://www.bilibili.com/video/av89369236/

    圖文答案

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

  • GEOADD 添加元素位置信息;
  • GEOPOS 查詢元素經(jīng)緯度信息;
  • GEODIST 查詢兩個元素的直線距離;
  • GEORADIUS 查詢附近一定距離內的元素信息。
  • 首先我們可以使用百度提供的經(jīng)緯度查詢工具來確定位置信息,地址:我們先用百度地圖提供的經(jīng)緯度查詢工具,地址:http://api.map.baidu.com/lbsapi/getpoint/index.html

    命令使用詳見視頻部分。

    代碼實戰(zhàn)

    下面我們用 Java 代碼,來實現(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í)行的結果如下:

    小明和小紅相距:3.9153 KM

    小明附近的人:xiaohong

    總結

    GEO 是 Redis 3.2 版本中新增的功能,只有升級到 3.2+ 才能使用,GEO 本質上是基于 ZSet 實現(xiàn)的,這點在 Redis 源碼找到相關信息,我們可以 GEO 使用實現(xiàn)查找附近的人或者附近的地點,還可以用它來計算兩個位置相隔的直線距離。

    總結

    以上是生活随笔為你收集整理的使用 Redis 如何实现查询附近的人?「视频版」——面试突击 003 期的全部內容,希望文章能夠幫你解決所遇到的問題。

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