做服装网站要那些照片,网站首页素材,做网站公司有哪些,免费行情网站软件这是我的第 33 篇原创文章作者 | 王磊 #xff08;javacn666#xff09;1 面试问题 Redis 如何实现查询附近的人#xff1f;2 相关面试问题 Redis 中如何操作位置信息#xff1f;GEO 底层是如何实现的#xff1f;如何在程序实现查询附近的人#xff1f;在实际使用中需要注… 这是我的第 33 篇原创文章作者 | 王磊 javacn6661 面试问题 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);MapString, 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 公里的人ListGeoRadiusResponse 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小明附近的人xiaohong5 总结 GEO 是 Redis 3.2 版本中引入的功能只有升级到 3.2 才能使用GEO 本质上是基于 ZSet 实现的这点在 Redis 源码找到相关信息我们可以 GEO 使用实现查找附近的人或者附近的地点还可以用它来计算两个位置相隔的直线距离。【END】近期热文 面试突击第 2 期 | Redis 是如何处理已过期元素的视频版面试突击第 1 期 | Redis 如何从海量数据中查询出某一个 Key视频版面试珍藏最常见的200多道Java面试题(2019年最新版)Java面试详解(2020版)500 面试题和核心知识点详解关注下方二维码订阅更多精彩内容朕已阅