개요
지리정보 관련 기능의 일부를 Redis에서도 간단하게나마 쓸 수 있다.
명령어
GEO 계열의 명령어도 있지만, 내부적으로 ZSet(Sorted Set)을 사용하기에 ZSet 계열 명령어도 일부 혼용 가능하다.
GEOADD
127.0.0.1:6379> help geoadd
GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]
summary: Add one or more geospatial items in the geospatial index represented using a sorted set
since: 3.2.0
group: geo
한 개 혹은 동시에 여러 개의 정보를 추가할 수 있다.
127.0.0.1:6379> geoadd mymap 126.98987242188554 37.55941851781025 seoul
(integer) 1
127.0.0.1:6379> geoadd mymap 126.70490404042661 37.45090270958281 incheon
(integer) 1
127.0.0.1:6379> geoadd mymap 127.01040005353661 37.28057047322624 suwon
(integer) 1
127.0.0.1:6379> geoadd mymap 127.39532142204321 36.339623748820216 daejon
(integer) 1
127.0.0.1:6379> geoadd mymap 126.8420829521135 35.147785432557086 gwangju
(integer) 1
127.0.0.1:6379> geoadd mymap 129.04055589134776 35.157693453092804 busan
(integer) 1
127.0.0.1:6379> geoadd mymap 127.49270219883297 36.62743582308363 cheongju
(integer) 1
127.0.0.1:6379> geoadd mymap 127.73269321810406 37.87415125284625 chuncheon
(integer) 1
구글맵에서 복사해 넣을 떄, 좌표의 위도와 경도를 잘 확인하고 입력하자.
- 경도 = longitutde
- 위도 = latitude
ZRANGE, ZREVRANGE, ZREM, ZCARD
// 데이터 정방향 조회
127.0.0.1:6379> zrange mymap 0 -1
1) "gwangju"
2) "busan"
3) "daejon"
4) "cheongju"
5) "incheon"
6) "suwon"
7) "seoul"
8) "chuncheon"
// 데이터 역방향 조회
127.0.0.1:6379> zrevrange mymap 0 -1
1) "chuncheon"
2) "seoul"
3) "suwon"
4) "incheon"
5) "cheongju"
6) "daejon"
7) "busan"
8) "gwangju"
// 멤버 갯수 확인
127.0.0.1:6379> zcard mymap
(integer) 8
ZSET 계열의 명령어로 데이터를 확인/ 관리할 수도 있다.
GEODIST
127.0.0.1:6379> help geodist
GEODIST key member1 member2 [m|km|ft|mi]
summary: Returns the distance between two members of a geospatial index
since: 3.2.0
group: geo
GEOADD로 데이터를 추가했으니, 두 도시간 거리를 확인해 보자.
// 기본 거리 조회는 m 단위
127.0.0.1:6379> geodist mymap seoul busan
"324172.0792"
// km로 파라미터를 주면 몇 km인지 거리를 측정한다
127.0.0.1:6379> geodist mymap seoul busan km
"324.1721"
GEORADIUS, GEORADIUSBYMEMBER
127.0.0.1:6379> help georadius
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point
since: 3.2.0
group: geo
127.0.0.1:6379> help georadiusbymember
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member
since: 3.2.0
group: geo
// 서울 기준 100km 이내 있는 도시는?
127.0.0.1:6379> georadiusbymember mymap seoul 100 km
1) "incheon"
2) "suwon"
3) "seoul"
4) "chuncheon"
// 서울 기준 50km 이내 있는 도시는?
127.0.0.1:6379> georadiusbymember mymap seoul 50 km
1) "incheon"
2) "suwon"
3) "seoul"
// 좌표를 안다면, 해당 좌표 기준 100km 이내의 도시는?
127.0.0.1:6379> georadius mymap 127 37 100 km
1) "daejon"
2) "cheongju"
3) "incheon"
4) "suwon"
5) "seoul"
GEOPOS
127.0.0.1:6379> help geopos
GEOPOS key member [member ...]
summary: Returns longitude and latitude of members of a geospatial index
since: 3.2.0
group: geo
등록한 도시의 좌표가 어떻게 되었더라?
127.0.0.1:6379> geopos mymap seoul
1) 1) "126.98986977338790894"
2) "37.55941829536805443"
GEOHASH
127.0.0.1:6379> help geohash
GEOHASH key member [member ...]
summary: Returns members of a geospatial index as standard geohash strings
since: 3.2.0
group: geo
저장된 hash값을 확인할 수 있다.
127.0.0.1:6379> geohash mymap seoul busan
1) "wydm9trpqr0"
2) "wy7b02k2qv0"
'Development > Hadoop, NoSQL, BigData' 카테고리의 다른 글
Hive - Queries against partitioned tables without a partition filter are disabled for safety reasons 에러 처리 (0) | 2022.12.28 |
---|---|
Redis pub/sub 소개 (2) | 2021.06.17 |
Redis 자료 구조 - ZSet (Sorted Set) (0) | 2021.06.02 |
Redis 자료 구조 - Hash (0) | 2021.05.27 |
Redis 자료 구조 - Set (0) | 2021.05.12 |
Redis 자료 구조 - List (0) | 2021.05.10 |
Redis 자료 구조 - String (0) | 2021.05.06 |
Memcached vs. Redis - 특징 비교 (0) | 2021.05.03 |