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과 같이 사용할 수 없음.
앱에서 특정 위치에서 가까운 곳의 위치를 찾으려면
- 식당 주소를 넣으면 위도 경도를 찾아서 디비에 넣는다.
- redis에 동시에 넣는다.
GEOADD restaurants -118.406267 33.751478 "rest-1" GEOADD restaurants -118.255890 34.047938 "rest-2"
- 유저의 위치를 파악한다. 위도 경도
- 현재 위치를 이용을 누르면 자신의 gps경로 위도 경도
- 주소를 넣으면 주소의 위도 경도
- GEORADIUS restaurants -118.406267 33.751478 30 mi WITHDIST ASC count 10 이걸 이용해서 리스트를 뽑아올수잇다.
- 문제는 레디스가 재부팅됫을때. api가 거리를 확인전에 항상 redis갯수를 확인해서 재로딩을 해야한다.