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根據自己位置查詢周邊車輛位置即可

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