Redis使用(二)—— GEO位置与查周边

Redis使用(一)——hash保存与模糊查询

看本文章的前提是已掌握Redis的基础操作,如插入、读取、删除数据等

示例使用ShardedJedisPool操作,实际开发可以使用RedisTemplate

目录:

1.保存座标

2.查询距离

3.查周边

4.应用场景

 

1.保存座标

ShardedJedis jedis = shardedJedisPool.getResource();
//插入座标 1.key:user_location  2.经度  3.纬度  4.标识
jedis.geoadd("user_location", 113.943765, 22.550899, "user1");
jedis.geoadd("user_location", 113.944511, 22.550736, "user2");
jedis.geoadd("user_location", 113.946056, 22.550741, "user4");
jedis.geoadd("user_location", 113.919664, 22.550561, "user5");

2.查询距离

//1.key  2.第一个用户标识  3.第二个用户标识 3.距离单位
jedis.geodist("user_location", "user1", "user5", GeoUnit.M)

3.查周边

//查询参数
GeoRadiusParam param = GeoRadiusParam.geoRadiusParam();
//如果需要查询距离,调用此方法
param.withDist();
//如果需要查询座标,调用此方法
param.withCoord();

//查询座标113.943765, 22.550899周围1000米范围内的数据
List<GeoRadiusResponse> radiusList = jedis.georadius("user_location", 113.943765, 22.550899, 1000, GeoUnit.M, param);

//遍历结果输出
for (GeoRadiusResponse radius : radiusList) {
    System.out.println("-------距离" + radius.getMemberByString() + "--                
  "+radius.getDistance() + "米");
}

4.应用场景

用过滴滴打车的都知道打开app,就会发现周边车辆,并且位置是实时变动的

这种数据量是很大的,如果实时位置信息全部存入数据库,对数据库压力很大,显然是不合理的,所以可以放入缓存,提高性能,车辆每次上报的位置信息先使用geoadd存入redis,用户进入app根据自己位置查询周边车辆位置即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章