看本文章的前提是已掌握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根据自己位置查询周边车辆位置即可