[Redis] Geospatials, Bitmaps

SeungJoo
|2024. 5. 6. 17:16
반응형

Geospatial indexes

 

지리적 정보를 저장하고 검색하는 데이터 구조입니다. 이 데이터 구조는 지리적 좌표를 저장하고, 좌표들 간의 거리를 계산하거나 특정 범위 내의 좌표들을 검색하는 기능을 제공합니다. 지리적 데이터는 위도와 경도로 표시됩니다. Geospatial Indexes는 이러한 위도와 경도를 기반으로 하여 데이터를 구성하며, 공간상의 거리나 위치를 계산할 수 있는 기능을 포함합니다. 이러한 데이터 구조는 지리 정보 시스템이나 위치 기반 서비스에서 많이 사용됩니다.

$ GEOADD seoul:station 126.923917 37.556944 hong-dae 127.027583 37.497928 gang-nam

특정 키 `seoul:station`이라는 지리적 위치와 해당 위치의 이름을 추가하며 위도와 경도 125.923917 37.556944로서 홍대의 위치를 나타내고, 127.027583 37.497928로서 강남의 위치를 나타냅니다.

$ GEODIST seoul:station hong-dae gang-nam KM

GEODIST는 두 지리적 위치 간의 거리를 계산하며 seoul:station 셋에 저장된 hong-dae, gang-nam 위치 간의 거리를 계산하며 결과를 KM 단위로 반환합니다.

Geospatial indexes를 사용하여 지리적 위치 데이터를 효율적으로 관리하고, 필요한 경우 거리를 계산하여 다양한 응용 프로그램에서 활용할 수 있습니다.

Bitmaps

실제 데이터 타입이 아닌, 무자열에 이진 연산을 적용하여 구현된 데이터 구조입니다. 비트 단위의 연산을 가능하게 함으로써 특정 데이터 집합을 효율적으로 표현하고 다룰 수 있게 합니다.

예를 들어 42억 개의 이전 데이터를 표현할 수 있는데, 이는 2^32개의 비트를 사용하여 각 비트가 특정 항목의 상태를 나타냅니다. 각 비트는 0 또는 1의 값을 가질 수 있으며, 0은 해당 항목이 없음을 나타내고 1은 해당항목이 존재함을 나타냅니다.

비트맵은 이진 AND, OR, XOR, NOT 등의 비트 연산을 사용하여 데이터를 처리할 수 있습니다. 이를 통해 데이터 집합 간의 교집합, 합집합, 여집합 등의 연산을 효율적으로 수행할 수 있습니다. 또한 비트맵은 데이터가 정수 형태로 표현되어야 하는 경우에도 유연하게 사용될 수 있습니다. 

 

Bitmaps를 사용하여 사용자의 로그인 기록을 관리할 수 있습니다.

$ SETBIT user:log-in:23-01-01 123 1

"user:log-in:23-01-01"이라는 키에 대해 123번 위치와 456번 위치의 비트를 1로 설정합니다. 여기서 123과 456은 각각 사용자의 ID를 나타냅니다.

$ SETBIT user:log-in:23-01-01 456 1


같은 키("user:log-in:23-01-01")에 대해 123번 위치와 456번 위치의 비트를 1로 설정합니다. 여기서 456번 비트는 이미 1로 설정되어 있으므로 변경되지 않습니다.

$ SETBIT user:log-in:23-01-02 123 1


다른 날짜("23-01-02")의 키("user:log-in:23-01-02")에 대해 123번 위치의 비트를 1로 설정합니다.

$ BITCOUNT user:log-in:23-01-01


"user:log-in:23-01-01" 키에 대해 비트가 설정된 개수를 세어줍니다. 따라서 이 명령어는 해당 키에 2개의 비트가 설정되어 있으므로 결과는 2가 됩니다.

$ BITOP AND result user:log-in:23-01-01 user:log-in:23-01-02


비트 연산을 수행합니다. 여기서는 AND 연산을 수행하고 결과를 "result"라는 새로운 키에 저장합니다. AND 연산은 두 키("user:log-in:23-01-01" 및 "user:log-in:23-01-02") 간의 비트 AND 연산을 수행하여 새로운 키("result")에 결과를 저장합니다.

$ GETBIT result 123


"result" 키에서 특정 위치(여기서는 123)의 비트 값을 가져옵니다. 이 명령어는 특정 사용자(ID가 123인 사용자)가 두 날짜("23-01-01" 및 "23-01-02")에 모두 로그인했는지를 확인합니다.


 

728x90

'DB' 카테고리의 다른 글

[Redis] Sorted Sets, Streams  (0) 2024.05.03
[Redis]Sets,Hashes  (0) 2024.05.02
[Redis] String, List  (1) 2024.05.01