2024.04.05 - [Spring/대용량 트래픽] - Redis CLI 실습
이전글에서는 Redis CLI에서 간단한 명령어들을 알아봤다.
이번 글은 Redis가 저장할 수있는 다양한 데이터 타입에 대해 알아보겠다.
NoSQL
Key/Value 구조의 저장을 지원한다. 저장 가능한 데이터 타입이 의미하는 것은 Value이다.
- Key : binary / text (숫자, 문자, 특수문자), 단일정보로만 저장 가능!
:(콜론) - 키에 여러가지 정보를 함께 저장하는 경우가 있을때 구분자로 사용한다. (강제되는것은 아니므로, 다른 키워드 사용해도 무관하지만 시각적으로 좋은것같다,,!)
- Value : 다양한 데이터타입
String
- 대표적인 기본 타입이다. 바이너리 데이터까지 저장가능하다.(이미지도 저장가능 하다는 뜻)
- 백엔드에서는 주로 Json formmat의 text 데이터를 저장하게 되는데, 객체를 직렬화한 Serialized Object 또한 저장하고 다루기 좋다.
- 숫자를 저장할 경우, 증가 감소에 대한 원자적 연산을 지원한다.
왜 원자적 연산을 지원할까?
각 어플리케이션에서 counter값을 1씩 늘려준다고 생각해보자.
어플리케이션은 둘다 counter = 1 이라고 레디스에게 알려줄것이다. 내가 원하는것은 두번 counter를 증가시켜서 counter=2가 나오는 것이지만, 실제 Redis에는 1이 두번설정되는 상황이된다. 밑에나오는 INCR, DECR 명령어를 사용해야할 이유이다.
※ 직렬화란? 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술.
명령어 종류
- SET (O(n) 시간복잡도) : 값을 저장
- SETNX : 값이 없는 경우에만 저장(SET으로 대체가능 → SET문장 마지막에 NX를 붙임)
- GET (O(n) 시간복잡도) : 값을 조회
- MGET : 여러키에 대한 값들을 조회 ☞ 필요한경우, GET보다 훨씬 성능적으로 이득이다.
- INC / DEC : 증가 / 감소
다른 데이터타입을 보기전에 Key에 대한 명령어를 알아보겠다.
TTL(Time To Live) : 데이터의 생존기간
- EXPIRE [KEY] [SECOND] : 모든 키의 삭제시간 설정
- TTL [KEY] : 키의 남은 시간 조회
DEL : 키를 삭제
- Key / Value가 동기적(sync)으로 삭제된다.
UNLINK : 키를 삭제
- Key / Value가 비동기적(async)으로 삭제된다.
비동기 명령이 필요한 이유? 내부적으로 지워야하는 대상이 많은 경우, 동기적 삭제는 시간이 많이소요 되기 때문
MEMORY USAGE : 해당 키의 데이터크기 확인
Lists
- String에 대한 Linked List 자료구조
- Stack, Queue 구현하는데 사용
명령어 종류
- LPUSH
- RPUSH
- LPOP
- RPOP
- LLEN
- LRANGE : 범위로 리스트 인덱스값 조회
** 0 -1 로 검색하면 전체 응답리스트를 받을수 있다.
전부 O(1)소요.
Sets
- 정렬되지 않은 String 리스트
- Unique 보장
명령어 종류
- SADD : 추가
- SREM : 삭제
- SISMEMBER : 특정값이 SET에 포함되어있는지 확인
- SMEMBERS : SET 전체데이터 조회 O(n)시간소요
- SINTER : 두개 이상의 SET에서 공통 데이터 뽑아줌 O(n^2) 소
- SCARD : SET에 포함된 데이터개수 조회
Sorted sets
- 특정 점수 기반으로 정렬 가능한 String 리스트
- Unique 보장
- 리더보드, Rate limit 구현 등에서 적절
명령어 종류
- ZADD : O(log n) 시간
- ZREM : O(log n) 시간
- ZRANGE : 오름차순, 내림차순에 맞게 데이터 가져올 수있음
- 점수조건 BYSCORE [REV] limit 시작인덱스 몇개의 데이터
- ZCARD
- ZRANK / ZREVRANK : 오름차순, 내림차순 기준으로 순위 조회
- ZINCRBY : 정수의 원자적 증가 연산
Hashes
- Field - Value 쌍으로 저장하는 컬렉션
- HashMap과 유사
명령어 종류
- HSET
- HGET, HMGET
- HGETALL
- HDEL
- HINCRBY
Geospatial
- 위 / 경도 정보 저장
- 위치 기반 서비스에서 활용하기 적합
명령어 종류
- GEOADD : O(log n)
- GEOSEARCH : O(n + log n)
- GEODIST : 저장된 위치간의 거리
- GEOPOS : 키에대해 위 / 경도 정보 조회
Bitmap
- 0 / 1 로 이루어진 비트열
- 메모리 적게 사용, 대량의 데이터 저장에 유용
명령어 종류
- SETBIT
- GETBIT
- BITCOUNT : 1로설정된 숫자 집계, O(n) 시간
다음글은 자바에서 각 데이터 타입에 대해 명령어를 어떻게 수행하는지 알아보겠다.
2024.05.03 - [Spring/대용량 트래픽] - Java에서 Redis 명령어
'Spring > 대용량 트래픽' 카테고리의 다른 글
Redis Transactions (0) | 2024.05.07 |
---|---|
Java에서 Redis 명령어 (0) | 2024.05.03 |
Redis CLI 실습 (0) | 2024.04.05 |
Redis,Docker 설치하기와 수많은 에러 (0) | 2024.04.05 |
Redis를 알아보자! (0) | 2024.04.01 |