面试突击第 3 期 | Redis 如何实现查询附近的人?视频实战版
这是我的第 33 篇原创文章
作者 | 王磊 (javacn666)
1 面试问题
Redis 如何实现查询附近的人?
2 相关面试问题
Redis 中如何操作位置信息?
GEO 底层是如何实现的?
如何在程序实现查询附近的人?
在实际使用中需要注意哪些问题?
3 相关答案
Redis 中要实现查询附近的人,需要使用 Redis 3.2 版本中提供的 GEO 数据类型,它包含以下几个重要的方法:
GEOADD 添加元素位置信息;
GEOPOS 查询元素经纬度信息;
GEODIST 查询两个元素的直线距离;
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】
近期热文
面试突击第 2 期 | Redis 是如何处理已过期元素的?视频版
面试突击第 1 期 | Redis 如何从海量数据中查询出某一个 Key?视频版
Java面试详解(2020版):500+ 面试题和核心知识点详解
关注下方二维码,订阅更多精彩内容
朕已阅
面试突击第 3 期 | Redis 如何实现查询附近的人?视频实战版相关推荐
- 使用 Redis 如何实现查询附近的人?「视频版」——面试突击 003 期
面试问题 Redis 如何实现查询附近的人? 涉及知识点 Redis 中如何操作位置信息? GEO 底层是如何实现的? 如何在程序实现查询附近的人? 在实际使用中需要注意哪些问题? 视频答案 视频地址 ...
- 面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇
这是我的第 34 篇原创文章 作者 | 老王(javacn666) 1 面试题 如何排查 Redis 中的慢查询? 2 涉及相关问题 Redis 中有没有慢查询排查工具或者相关排查手段? 慢查询日志都 ...
- java面试突击-2022最新迭代redis\mq\springCloud-纯手打
本博客是本人纯手打然后去网上百度的图片,转发请注明出处 按照自己的理解适合给初级程序员找工作用的 顺便给自己回顾一下,都是按照自己的理解来写的,有的地方不通顺或者不理解可以问我,有写不对的地方或者不同 ...
- 「视频版」当线程池溢出之后,程序会奔溃吗?面试突击 007 期
哈喽,大家好,我是老王,欢迎来到第 7 期的 Java 面试突击. 本文的面试题是,当线程池的任务溢出之后,程序会奔溃吗? 这个问题问的是关于线程池的任务数超过线程池的承载能力之后,会出现什么情况? ...
- HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期...
无论是在实际工作中还是在面试中,HashMap 无疑是使用频率最高的知识点之一,所以我们需要搞懂每一个关于 HashMap 的知识点才行. 哈喽,大家好,我是老王,欢迎来到 Java 面试突击,我们今 ...
- 面试突击 | Redis 如何从海量数据中查询出某一个 Key?视频版
作者 | 王磊 面试突击 | 第 001 期 1 考察知识点 本题考察的知识点有以下几个: Keys 和 Scan 的区别 Keys 查询的缺点 Scan 如何使用? Scan 查询的特点 2 解答思 ...
- 面试突击 005 | Redis 是如何实现高可用的?它的实现方式有哪些?「视频版」
这是我的第 35 篇原创文章 作者 | 老王(javacn666) 这部视频的录制.剪辑.做 PPT.写文稿大约花费了 5 个小时的时间,希望这种形式能被更多的人喜欢,希望这篇文章会给你带来更多的价值 ...
- 面试突击 002 | Redis 是如何处理已过期元素的?
1 面试题 Redis 如何处理已过期的元素? 2 涉及知识点 此问题涉及以下知识点: 过期删除策略有哪些? 这些过期策略有哪些优缺点? Redis 使用的是什么过期策略? Redis 是如何优化和执 ...
- Redis面试突击串讲 --图灵
Redis面试突击串讲 什么是Redis Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的高性能非关系型(NoSQL)的键值对数据库. 与传统数据库不 ...
最新文章
- 想非常牛掰的在WORD中调中多级符号吗
- SharePoint 2007 Web Content Management 性能优化系列 前言
- 修改记录功能--jsp,servlet
- Ubuntu 17.10安装phpMyAdmin数据库管理工具
- Hbase Compaction 源码分析 - RatioBasedCompactionPolicy 策略
- 程序员亲身体验的学历之痛
- Eclipse中执行Tomcat源代码
- ChainOfResponsibilityPattern(23种设计模式之一)
- 关于编辑区无法调用chekbox的问题
- CF914D Bash and a Tough Math Puzzle 线段树
- 互联网大厂程序员梦醒时分
- JAVA设计模式1 ---- 简单工厂模式 (以汽车工厂为例)
- 最好的时光在路上,最美的风景在远方
- 如何把团队带成一盘散沙?
- 周末闲暇用javascript写个网页“斗兽棋”小游戏
- 点云八个方向极值点获取
- 【运筹优化】Python调用OR-Tools求解TSP问题
- opencv中的split函数
- Qt 5入门指南之Qt Quick编程示例
- 机器学习完整项目实战附代码(一):探索型数据分析+特征工程+建模+报告
热门文章
- 控制台:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow
- Flume监听端口,输出端口数据案例
- 本地缓存Caffeine
- 推荐好用的JavaScript模块
- leetcode 回文数
- Exchange server 2013(十四)WSUS部署及组策略设置(2)
- mysql学习笔记(1-安装简介)
- Bootstrap学习笔记系列1-------Bootstrap网格系统
- 比较两大虚拟桌面厂商的系统镜像管理
- 正则表达式验证密码强度