程序员社区

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

> Hello,欢迎来到程序员社区。 今天聊一聊 使用 Redis 如何实现查询附近的人?「视频版」——面试突击 003 期,希望对大家有所帮助。

Java面试手册PDF下载:[点击下载最全Java面试手册](http://117.78.51.75/219-2)

编程电子书汇总

面试问题

Redis 如何实现查询附近的人?

涉及知识点

  1. Redis 中如何操作位置信息?
  2. GEO编程电子书汇总 底层是如何实现的?
  3. 如何在程序实现查询附近的人?
  4. 在实际使用中需要注意哪些问题?

视频答案

视频地址:https://www.bilibili.com/video/av89369236/

图文答案

Redis 中要实现查询附近的人,需要使用 Redis 3.2 版本中提供的 GEO 数据类型,它包含以下几个重要的方法:

  1. GEOADD 添加元素位置信息;
  2. GEOPOS 查询元素经纬度信息;
  3. GEODIST 查询两个元素的直线距离;
  4. GEORADIUS 查询附近一定距离内的元素信息。

首先我们可以使用百度提供的经纬度查询工具来确定位置信息,地址:我们先用百度地图提供的经纬度查询工具,地址:http://api.maJava面试手册p.baidu.com/lbsapi/getpoint/index.html

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

命令使用详见视频部分。

代码实战

下面我们用 Java 代码,来实现查询附近的人,完整代码如下:

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 map = new HashMap();
        // 添加小明的位置
        map.put("xiaoming", new GeoCoordinate(116.404269, 39Java面试手册.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 res = jedis.georadiusByMemberReadonly("person", "xiaoming",
                5, GeoUnit.KM);
        for (int i = 1; i 

以上程序执行的结果如下:

总结

> 时间不一定能证明很多东西,但是一定能看透很多东西。坚信自己的选择,不动摇,使劲跑,明天会更好。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 使用 Redis 如何实现查询附近的人?「视频版」——面试突击 003 期

一个分享Java & Python知识的社区