Redis Geo 정보 처리

# restaurants를 키로 사용한다.

geoadd - geo정보 등록하기

geoadd restaurants -118.40 33.75 "restaurant-1"
geoadd restaurants -119.40 35.75 "restaurant-2"

geopos - geo정보 확인하기

geopos restaurants "restaurant-1"

geodist - 거리 계산

geodist restaurants "restaurant-1" "restaurant-2" mi

georadiusbymember 특정 멤버내 radius에 범위 내에 잇는 멤버들

georadiusbymember restaurants home 20 mi withdist

georadiusbymember restaurants home 30 mi withdist count 1 desc
#home에서 30mi 안에 있는 member를 찾고 이를 거리가 먼 순부터 정렬한뒤 1개의 멤버만 리턴해라.
# 가까운 거리는 2를 넣자. 1은 자기 자신

georadius - 지정한 지점에서 반경 몇 km 이내의 지역(member)를 찾는다.

GEORADIUS restaurants -118.40 33.75 30 mi withdist asc count 10

옵션들

  • 거리 단위
    • m: meter
    • km: kilometer
    • ft: feet, 0.3048 meter
    • mi: mile, 1.6093 kilometer
  • WITH option: 중복할 수 있음
  • WITHCOORD: 좌표(Coordinate) 조회
  • WITHDIST: 거리 조회
  • WITHHASH: 해시값 조회
  • COUNT: 조회할 지역(member) 수 선택
  • ASC: 가까운 지역부터 표시
  • DESC: 먼 지역부터 표시
  • 결과 저장 option
    • STORE key: WITH option과 같이 사용할 수 없음.

앱에서 특정 위치에서 가까운 곳의 위치를 찾으려면

  1. 식당 주소를 넣으면 위도 경도를 찾아서 디비에 넣는다.
  2. redis에 동시에 넣는다.
      GEOADD restaurants -118.406267 33.751478 "rest-1"
      GEOADD restaurants -118.255890 34.047938 "rest-2"
    
  3. 유저의 위치를 파악한다. 위도 경도
  4. 현재 위치를 이용을 누르면 자신의 gps경로 위도 경도
  5. 주소를 넣으면 주소의 위도 경도
  6. GEORADIUS restaurants -118.406267 33.751478 30 mi WITHDIST ASC count 10 이걸 이용해서 리스트를 뽑아올수잇다.
  7. 문제는 레디스가 재부팅됫을때. api가 거리를 확인전에 항상 redis갯수를 확인해서 재로딩을 해야한다.
teamsmiley's profile image

teamsmiley

2020-06-22 00:00

Read more posts by this author