这是我的第 33 篇原创文章

作者 | 王磊 (javacn666)

1 面试问题

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

2 相关面试问题

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

  • GEO 底层是如何实现的?

  • 如何在程序实现查询附近的人?

  • 在实际使用中需要注意哪些问题?

3 相关答案

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

  1. GEOADD 添加元素位置信息;

  2. GEOPOS 查询元素经纬度信息;

  3. GEODIST 查询两个元素的直线距离;

  4. GEORADIUS 查询附近一定距离内的元素信息。

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

命令使用详见视频部分。

3 视频演示

视频内容如下:

4 代码实战

下面我们用 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<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());}}
}

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

小明和小红相距:3.9153 KM

小明附近的人:xiaohong

5 总结

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

【END】

近期热文

关注下方二维码,订阅更多精彩内容

朕已阅 

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

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

    面试问题 Redis 如何实现查询附近的人? 涉及知识点 Redis 中如何操作位置信息? GEO 底层是如何实现的? 如何在程序实现查询附近的人? 在实际使用中需要注意哪些问题? 视频答案 视频地址 ...

  2. 面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇

    这是我的第 34 篇原创文章 作者 | 老王(javacn666) 1 面试题 如何排查 Redis 中的慢查询? 2 涉及相关问题 Redis 中有没有慢查询排查工具或者相关排查手段? 慢查询日志都 ...

  3. java面试突击-2022最新迭代redis\mq\springCloud-纯手打

    本博客是本人纯手打然后去网上百度的图片,转发请注明出处 按照自己的理解适合给初级程序员找工作用的 顺便给自己回顾一下,都是按照自己的理解来写的,有的地方不通顺或者不理解可以问我,有写不对的地方或者不同 ...

  4. 「视频版」当线程池溢出之后,程序会奔溃吗?面试突击 007 期

    哈喽,大家好,我是老王,欢迎来到第 7 期的 Java 面试突击. 本文的面试题是,当线程池的任务溢出之后,程序会奔溃吗? 这个问题问的是关于线程池的任务数超过线程池的承载能力之后,会出现什么情况? ...

  5. HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期...

    无论是在实际工作中还是在面试中,HashMap 无疑是使用频率最高的知识点之一,所以我们需要搞懂每一个关于 HashMap 的知识点才行. 哈喽,大家好,我是老王,欢迎来到 Java 面试突击,我们今 ...

  6. 面试突击 | Redis 如何从海量数据中查询出某一个 Key?视频版

    作者 | 王磊 面试突击 | 第 001 期 1 考察知识点 本题考察的知识点有以下几个: Keys 和 Scan 的区别 Keys 查询的缺点 Scan 如何使用? Scan 查询的特点 2 解答思 ...

  7. 面试突击 005 | Redis 是如何实现高可用的?它的实现方式有哪些?「视频版」

    这是我的第 35 篇原创文章 作者 | 老王(javacn666) 这部视频的录制.剪辑.做 PPT.写文稿大约花费了 5 个小时的时间,希望这种形式能被更多的人喜欢,希望这篇文章会给你带来更多的价值 ...

  8. 面试突击 002 | Redis 是如何处理已过期元素的?

    1 面试题 Redis 如何处理已过期的元素? 2 涉及知识点 此问题涉及以下知识点: 过期删除策略有哪些? 这些过期策略有哪些优缺点? Redis 使用的是什么过期策略? Redis 是如何优化和执 ...

  9. Redis面试突击串讲 --图灵

    Redis面试突击串讲 什么是Redis Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的高性能非关系型(NoSQL)的键值对数据库. 与传统数据库不 ...

最新文章

  1. 想非常牛掰的在WORD中调中多级符号吗
  2. SharePoint 2007 Web Content Management 性能优化系列 前言
  3. 修改记录功能--jsp,servlet
  4. Ubuntu 17.10安装phpMyAdmin数据库管理工具
  5. Hbase Compaction 源码分析 - RatioBasedCompactionPolicy 策略
  6. 程序员亲身体验的学历之痛
  7. Eclipse中执行Tomcat源代码
  8. ChainOfResponsibilityPattern(23种设计模式之一)
  9. 关于编辑区无法调用chekbox的问题
  10. CF914D Bash and a Tough Math Puzzle 线段树
  11. 互联网大厂程序员梦醒时分
  12. JAVA设计模式1 ---- 简单工厂模式 (以汽车工厂为例)
  13. 最好的时光在路上,最美的风景在远方
  14. 如何把团队带成一盘散沙?
  15. 周末闲暇用javascript写个网页“斗兽棋”小游戏
  16. 点云八个方向极值点获取
  17. 【运筹优化】Python调用OR-Tools求解TSP问题
  18. opencv中的split函数
  19. Qt 5入门指南之Qt Quick编程示例
  20. 机器学习完整项目实战附代码(一):探索型数据分析+特征工程+建模+报告

热门文章

  1. 控制台:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow
  2. Flume监听端口,输出端口数据案例
  3. 本地缓存Caffeine
  4. 推荐好用的JavaScript模块
  5. leetcode 回文数
  6. Exchange server 2013(十四)WSUS部署及组策略设置(2)
  7. mysql学习笔记(1-安装简介)
  8. Bootstrap学习笔记系列1-------Bootstrap网格系统
  9. 比较两大虚拟桌面厂商的系统镜像管理
  10. 正则表达式验证密码强度