zoukankan      html  css  js  c++  java
  • Redis 如何实现查询附近的距离

    注:转

    面试问题

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

    涉及知识点

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

    图文答案

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

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

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

     代码:

        public static void main(String[] args) {
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            Map<String, GeoCoordinate> map = new HashMap<>();
            // 添加A的位置
            map.put("A", new GeoCoordinate(116.404269, 39.913164));
            // 添加B的位置
            map.put("B", new GeoCoordinate(116.36, 39.922461));
            // 添加C的位置
            map.put("C", new GeoCoordinate(116.499705, 39.874635));
            // 添加D的位置
            map.put("D", new GeoCoordinate(116.193275, 39.996348));
            jedis.geoadd("person", map);
            // 查询A和B的直线距离
            System.out.println("A和B相距:" + jedis.geodist("person", "A",
                    "B", GeoUnit.KM) + " KM");
            // 查询A附近 5 公里的人
            //jedis.georadiusByMemberReadonly()
            List<GeoRadiusResponse> res = jedis.georadiusByMember("person", "A",
                    5, GeoUnit.KM);
            for (int i = 1; i < res.size(); i++) {
                System.out.println("A附近的人:" + res.get(i).getMemberByString());
            }
        }

    总结

    GEO 是 Redis 3.2 版本中新增的功能,只有升级到 3.2+ 才能使用,GEO 本质上是基于 ZSet 实现的,这点在 Redis 源码找到相关信息,我们可以 GEO 使用实现查找附近的人或者附近的地点,还可以用它来计算两个位置相隔的直线距离。

    图文答案

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

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

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

  • 相关阅读:
    新年快乐,献上一份自己修改的WM6主题。
    做好MSSQL保卫战之xp_cmdshell
    [转载]Validation of viewstate MAC failed异常的原因及解决方法
    数字字符串转换为数字
    理解虚基类、虚函数与纯虚函数的概念
    你的卡销户了吗 - 中国移动收取滞纳金
    解决光驱门打不开的问题
    UCWEB使用之我见
    定时关闭窗口 For Windows Mobile SP/PPC
    减少SQL Server 死锁
  • 原文地址:https://www.cnblogs.com/weigy/p/12467454.html
Copyright © 2011-2022 走看看