redisview如何查询_Redis 如何实现查询附近的距离

注:转

面试问题

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

涉及知识点

Redis 中如何操作位置信息?

GEO 底层是如何实现的?

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

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

图文答案

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

GEOADD 添加元素位置信息;

GEOPOS 查询元素经纬度信息;

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

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

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

代码:

public static voidmain(String[] args) {

Jedis jedis= new Jedis("127.0.0.1", 6379);

Map 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 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 数据类型,它包含以下几个重要的方法:

GEOADD 添加元素位置信息;

GEOPOS 查询元素经纬度信息;

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值