Spring/대용량 트래픽

Redis 다양한 데이터 타입 알아보기

Ls._.Rain 2024. 4. 30. 17:48
2024.04.05 - [Spring/대용량 트래픽] - Redis CLI 실습
 

Redis CLI 실습

2024.04.05 - [Spring/대용량 트래픽] - Redis,Docker 설치하기와 수많은 에러 Redis,Docker 설치하기와 수많은 에러 도커 컨테이너 기반으로 Redis를 설치해보겠다. https://hub.docker.com/_/redis redis - Official Image | Do

lsdiary.tistory.com

이전글에서는 Redis CLI에서 간단한 명령어들을 알아봤다.

이번 글은 Redis가 저장할 수있는 다양한 데이터 타입에 대해 알아보겠다.

NoSQL

Key/Value 구조의 저장을 지원한다. 저장 가능한 데이터 타입이 의미하는 것은 Value이다.

  • Key : binary / text (숫자, 문자, 특수문자),  단일정보로만 저장 가능!

:(콜론) - 키에 여러가지 정보를 함께 저장하는 경우가 있을때 구분자로 사용한다. (강제되는것은 아니므로, 다른 키워드 사용해도 무관하지만 시각적으로 좋은것같다,,!)

  • Value : 다양한 데이터타입

String

 

  • 대표적인 기본 타입이다. 바이너리 데이터까지 저장가능하다.(이미지도 저장가능 하다는 뜻)
  • 백엔드에서는 주로 Json formmat의 text 데이터를 저장하게 되는데, 객체를 직렬화한 Serialized Object 또한 저장하고 다루기 좋다.
  • 숫자를 저장할 경우, 증가 감소에 대한 원자적 연산을 지원한다.

왜 원자적 연산을 지원할까? 

 

counter에 대한 로직

 각 어플리케이션에서 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 명령어

 

Java에서 Redis 명령어

2024.04.30 - [Spring/대용량 트래픽] - Redis 다양한 데이터 타입 알아보기 Redis 다양한 데이터 타입 알아보기2024.04.05 - [Spring/대용량 트래픽] - Redis CLI 실습lsdiary.tistory.com이전까지 Redis CLI를 통해서 다

lsdiary.tistory.com