看本文章的前提是已掌握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根據自己位置查詢周邊車輛位置即可