Redis는 주로 키-값(Key-Value) 데이터 저장소로 사용되는 NoSQL 유형과 비슷하다
key : binary / text
ex) "name","123","#!:()"
권장되는 최대 길이는 512MB
value : 다양한 자료구조로 데이터 타입을 저장할 수 있다
1) EXPIRE [KEY][SECOND]
- key: 타임아웃을 설정할 키
- seconds: 키가 만료되기까지의 시간(초)
EXPIRE mykey 60
2) TTL[KEY]
- key: 남은 시간을 확인하고자 하는 키
1) DEL 명령어
DEL 명령어는 지정된 키를 삭제
동기적으로 수행되며, 키가 많은 메모리를 사용하고 있을 경우 삭제하는 데 시간이 걸릴 수 있다
Redis의 메인 스레드에서 실행되므로, 큰 키를 삭제할 때 잠재적으로 성능에 영향을 줄 수 있다
2) UNLINK 명령어
UNLINK 명령어는 DEL 명령어와 유사하게 키를 삭제하지만, 비동기적으로 삭제된다
큰 키를 삭제할 때 Redis의 메인 스레드가 아닌 별도의 백그라운드 스레드를 사용하여 실제 메모리 삭제를 한다
-> 서비스 운영관점에서 더 안정성이 높다
동기적 vs 비동기적
- 동기적: 동기적 처리는 특정 작업이 완료될 때까지 다른 작업을 대기시키는 방식
즉, 하나의 작업이 끝나야 다음 작업을 시작할 수 있다. 프로그램은 작업이 완료될 때까지 멈춘 상태로 대기한다- 비동기적: 비동기적 처리는 특정 작업이 완료될 때까지 대기하지 않고, 다른 작업을 동시에 처리할 수 있는 방식
작업이 완료되면 별도로 알림을 받아 처리할 수 있다 프로그램의 응답성을 높이고, 효율성을 증가시킨다
MEMORY USAGE 명령어는 특정 키가 차지하는 메모리 양을 바이트 단위로 반환한다
레디스 데이터베이스에서 특정 데이터 구조가 얼마나 많은 메모리를 사용하고 있는지 파악할 수 있게 해준다
SET
SETNX
GET
MGET
INC
DEC
1) SET 명령어
SET 명령어는 지정된 키에 값을 저장
SET key value
ex) SET mykey "Hello"
2) SETNX 명령어
SETNX(SET if Not Exists)는 키가 존재하지 않을 때만 값을 설정
SETNX key value
ex) SETNX mykey "Hello"
3) GET 명령어
GET 명령어는 지정된 키의 값을 가져온다
GET key
ex) GET mykey
4) ⚡️ MGET 명령어
MGET 명령어는 여러 키의 값을 동시에 가져온다
MGET key1 key2 ... keyN
ex) MGET key1 key2
5) INCR 명령어
INCR 명령어는 지정된 키의 값을 정수로 해석하여 1 증가
INCR key
ex) INCR counter
6) DECR 명령어
DECR 명령어는 지정된 키의 값을 정수로 해석하여 1 감소
DECR key
ex: DECR counter
Redis의 Lists는 삽입된 순서를 유지하는 데이터 구조로, 명령어를 통해 리스트의 양 끝에서 요소를 추가하거나 제거할 수 있다
- Linked List (strings)
- ex) Java ArrayList- Queue, Stack
LPUSH 로 리스트 왼쪽에 {id:100} 삽입
RPUSH 로 리스트 오른쪽에 {id:200} 삽입
LRANGE 로 0 1 을 불러오면
순서대로 출력되는것을 볼 수 있다
LRANGE key 0 -1 : 전체를 조회한다 -> 0에서 가장 마지막 (-1: 역으로 봤을때 가장 마지막수는 -1)
LPOP RPOP 키로 제거 하면서 조회도 가능하다
Redis의 Sets는 중복 없는 문자열의 집합을 저장하는 데이터 구조Sets는 원소의 유일성을 보장하며 다양한 집합 연산을 지원
-> UNIQUE 한 값을 보장하는 것이 특징
Unordered collection(unique strings)
- ex) java set
Unique item
- SNS follow
- Blacklist
- Tags
SADD 로 요소를 추가하는데
밑에 0으로 반환되는 값들을 보면, 위에 값들과 중복된 값이므로 추가가 되지 않기 때문에 0으로 반환된다
Redis의 Sorted Sets는 중복 없는문자열의 집합을 저장하면서 각 요소에 점수(score)를 할당하여 자동으로 정렬하는 데이터 구조 순위나 순서가 중요한 데이터 관리에 유용
값과 관련된 value 를 저장한다
index 정보와 score 정보를 함께 조회할 수 있다 (오름차순)
1) byscore 점수조건 0 부터 inf(무한대) 기준으로 하위 3위까지 출력
2) byscore 점수조건 0 부터 inf(무한대) 기준으로 상위 3위까지 출력 -> rev: 내림차순
Redis Hashes는 필드-값(field-value) 쌍을 저장하는 데이터 구조로 (그룹화), 하나의 키(key) 아래 여러 필드와 값을 저장할 수 있어 관계형 데이터베이스의 행(row)과 비슷한 개념
users : 1000
name : lee
email : lee @ email
age:20
Redis Geospatial 기능은 위치 기반 데이터를 다루기 위한 기능을 제공 , 위경도의 위치를 저장할 수 있다
특정 위치(지리 좌표)를 키에 저장하고 이를 이용한 다양한 연산을 할 수 있음 GPS 좌표를 다루는 응용 프로그램에서 사용
GEOADD key longitude latitude member: 지정된 키에 지리 좌표(longitude, latitude)와 해당 위치를 나타내는 멤버(member)를 추가
GEODIST key member1 member2 [unit]: 두 멤버 간의 거리(단위 선택 가능)를 반환
GEOHASH key member [member ...]: 지정된 멤버의 지오해시 값을 반환
GEOPOS key member [member ...]: 지정된 멤버의 지리 좌표를 반환
GEORADIUS key longitude latitude radius m|km|ft|mi: 주어진 중심 좌표에서 특정 반경 내에 있는 모든 멤버를 반환
GEORADIUSBYMEMBER key member radius m|km|ft|mi: 특정 멤버를 중심으로 지정된 반경 내에 있는 모든 멤버를 반환
GEOSEARCH (6.2버전이상) : 위경도 정보를 조회
GEOADD locations 13.361389 38.115556 "Palermo"
GEOADD locations 15.087269 37.502669 "Catania"
GEODIST locations "Palermo" "Catania" km
# 결과: "166.2742"
GEOHASH locations "Palermo" "Catania"
# 결과: ["sqc8b49rny0", "sqdtr74hyu0"]
GEOPOS locations "Palermo" "Catania"
# 결과: [["13.36138933897018433", "38.11555639549629859"], ["15.08726745843887329", "37.50266842333162032"]]
GEORADIUS locations 15 37 200 km
# 결과: ["Catania", "Palermo"]
GEORADIUSBYMEMBER locations "Palermo" 200 km
# 결과: ["Palermo", "Catania"]
Redis Bitmaps는 비트 기반의 데이터 구조를 지원하여, 비트의 집합을 저장하고 조작할 수 있다
주로 비트 플래그 또는 상태를 효율적으로 관리할 때 사용
- 0 또는 1의 값으로 이루어진 비트열
- 메모리를 적게 사용하여 대량의 데이터 저장에 유용
SETBIT key offset value: 지정된 키의 오프셋 위치에 비트 값을 설정합니다.
SETBIT mykey 7 1
이 명령은 mykey
의 7번째 비트를 1로 설정
GETBIT key offset: 지정된 키의 오프셋 위치에 있는 비트 값을 가져옵니다.
GETBIT mykey 7
이 명령은 mykey
의 7번째 비트 값을 반환
BITCOUNT key [start end]: 지정된 범위 내에서 비트가 1인 비트의 개수를 계산합니다.
BITCOUNT mykey
이 명령은 mykey
의 전체 비트 중 1인 비트의 개수를 반환
BITOP operation destkey key [key ...]: 비트 연산을 수행하여 결과를 destkey에 저장합니다. 연산은 AND, OR, XOR, NOT이 있다
BITOP AND resultKey key1 key2
이 명령은 key1
과 key2
의 비트를 AND 연산하여 resultKey
에 저장
BITPOS key bit [start][end]: 지정된 비트 값이 처음으로 나타나는 위치를 반환
BITPOS mykey 1
이 명령은 mykey
에서 비트 1이 처음 나타나는 위치를 반환
SETBIT users:active 0 1
SETBIT users:active 1 0
SETBIT users:active 2 1
SETBIT users:active 3 1
GETBIT users:active 2
# 결과: 1
BITCOUNT users:active
# 결과: 3
BITOP AND result users:active anotherbitmap
BITPOS users:active 1
# 결과: 0