[Redis]레디스 기본 개념

Jeongyeon Kim·2023년 12월 29일
1

Redis

목록 보기
2/7
post-thumbnail

레디스에서 모든 데이터는 키에 연결되어 있기 때문에 데이터를 저장하고, 저장된 데이터를 검색할 때에는 항상 키를 식별자로 이용

레디스의 자료 구조


string

  • 최대 512MB의 문자열 데이터 저장 가능
  • 이진 데이터를 포함하는 모든 종류의 문자열이 binary-safe하게 처리
    ➡️ JPEG 이미지와 같은 바이트 값, HTTP 응답값 등의 다양한 데이터 저장 가능
  • 키와 실제 저장되는 아이템이 일대일로 연결
command설명옵션
SET데이터 저장NX, XX
GET데이터 조회
INCR저장된 데이터 1씩 증가
INCRBY입력한 값 만큼 데이터 증가
DECR저장된 데이터 1씩 감소
DECRBY입력한 값 만큼 데이터 감소
MSET여러 데이터 한번에 저장
MGET여러 데이터 한번에 조회

list

  • 순서를 가지는 문자열의 목록
  • 하나의 list에 최대 42억여개의 아이템 저장 가능
  • 스택과 큐로 사용
  • LPUSH, RPUSH, LPOP, RPOP ➡️ O(1)
  • 인덱스나 데이터를 이용해 list의 중간 데이터에 접근할 때는 ➡️ O(n)
command설명옵션
LPUSHlist의 왼쪽(head)에 데이터 추가
RPUSHlist의 오른쪽(tail)에 데이터 추가
LPOPlist에 저장된 첫 번째 아이템 반환과 동시에 삭제
LRANGE시작과 끝 아이템의 인덱스를 각각 인수로 받아 출력
LTRIM시작과 끝 아이템의 인덱스를 인자로 전달받아 지정한 범위에 속하지 않는 아이템 모두 삭제, 삭제되는 아이템 반환X
LINSERT원하는 데이터의 앞이나 뒤에 데이터 추가BEFORE, AFTER
LSET지정한 인덱스의 데이터를 신규 입력하는 데이터로 덮어 씀, list의 범위를 벗어난 인덱스를 입력함녀 에러 반환
LINDEX원하는 인덱스의 데이터 확인

hash

  • 필드-값 쌍을 가진 아이템의 집합
  • 필드는 하나의 hash 내에서 유일하며, 필드와 값 모두 문자열 데이터로 저장됨
  • 각 아이템마다 다른 필드를 가질 수 있으며, 동적으로 다양한 필드를 추가할 수 있음
  • 객체를 표현하기에 적절하기 때문에 관계형 데이터베이스의 테이블 데이터로 변환 간편
command설명옵션
HSEThash에 아이템 저장, 한 번에 여러 필드-값 쌍 저장 가능
HGEThash에 저장된 데이터 가져옴
HMGET하나의 hash 내에서 다양한 필드의 값 가져옴
HGETALLhash 내의 모든 필드-값 쌍을 차례로 반환
HRANDFIELD랜덤으로 아이템 추출COUNT. WITHVALUES

set

  • 정렬되지 않은 문자열의 모음
  • 교집합, 합집합, 차집합 등의 집합 연산과 관련한 커맨드 제공
  • 객체 간의 관계를 계산하거나 유일한 원소를 구해야 할 경우에 사용됨
command설명옵션
SADDset에 아이템 저장, 저장되는 실제 아이템 수 반환
SMEMBERSset에 저장된 전체 아이템 출력, 데이터 저장 순서와 관계없이 랜덤하게 출력
SREMset에서 원하는 데이터 삭제
SPOPset 내부의 아이템 중 랜덤으로 하나의 아이템을 반환하는 동시에 set에서 그 아이템 삭제
SUNION합집합
SINTER교집합
SDIFF차집합
SRANDMEMBER랜덤으로 아이템 추출COUNT, WITHSCORE
SCARD해당 set에 저장된 키의 개수 리턴

sortedSet

  • 스코어(score) 값에 따라 정렬되는 고유한 문자열의 집합
  • 모든 아이템은 스코어-값 쌍을 가지며, 저장될 때부터 스코어 값으로 정렬되어 저장됨
  • 같은 스코어를 가진 아이템을 데이터의 사전 순으로 정렬
  • list에서 인덱스를 이용해 데이터에 접근하는 것은 O(n)으로 처리되지만, sorted set에서는 O(log(n))으로 처리됨
command설명옵션
ZADDsorted set에 아이템 저장, 스코어-값 쌍으로 입력, 한 번에 여러 아이템 입력 가능, 저장과 동시에 스코어 값으로 정렬됨XX, NX, LT, GT
ZRANGEsorted set에 저장된 데이터 조회(인덱스 기반), start와 stop(범위) 반드시 입력WITHSCORE, REV, BYSCORE, BYLEX
ZREVRANGEsorted set에 저장된 데이터를 내림차순으로 반환
ZINCRBYsorted set 내의 아이템의 스코어를 입력한 만큼 증가
ZUNIONSTORE지정한 키에 연결된 각 아이템이 스코어를 합산, 스코어에 가중치 부여 가능WEIGHTS
ZRANDMEMBER랜덤으로 아이템 추출COUNT, WITHSCORE

비트맵

  • string 자료구조에 bit 연산을 수행할 수 있도록 확장한 형태
  • 저장 공간을 획기적으로 줄일 수 있다는 장점이 있음
command설명옵션
SETBIT비트 저장
GETBIT비트 조회
BITFIELD한 번에 여러 비트 SET
BITCOUNT1로 설정된 비트의 개수 카운팅
BITTOPAND, OR, XOR, NOT 연산AND, OR, XOR, NOT

Hyperloglog

  • 집합의 원소 개수인 카디널리티를 추정할 수 있는 자료 구조
  • 대량 데이터에서 중복되지 않는 고유한 값을 집계할 때 유용
  • 입력되는 데이터 그 자체를 저장하지 않고 자체적인 방법으로 데이터를 변경해 처리
  • 저장되는 데이터 개수에 구애받지 않고 계속 일정한 메모리를 유지할 수 있으며, 중복되지 않는 유일한 원소의 개수 계산 가능
  • 최대 12KB 크기
  • 카디널리티 추정 오차 0.81%로 비교적 정확하게 데이터 추정 가능
command설명옵션
PFADDhyperloglog에 아이템 저장
PFCOUNT저장된 아이템의 수(카디널리티) 추정
PFMERGE여러 개의 hyperloglog 합침

Geospatial

  • 경도, 위도 데이터 쌍의 집합
  • 내부적으로 데이터는 sorted set으로 저장되며, 하나의 자료 구조 안에 키는 중복되어 저장되지 않음
command설명옵션
GEOADD위치 데이터 저장XX, NX
GEOPOS지정된 위치 데이터 조회
GEODIST두 아이템 사이의 거리 반환
GEOSEARCH지정된 위치 데이터 조회BYRADIUS, BYBOX, FROMLONLAT, FROMMEMBER

stream

  • 레디스를 메시지 브로커로서 사용할 수 있게 하는 자료 구조
  • 카프카에서 영향을 받아 만들어짐
  • 소비자 그룹 개념을 도입해 데이터를 분산 처리할 수 있는 시스템
  • 데이터를 계속해서 추가하는 방식(append-only)로 저장 ➡️ 실시간 이벤트 or 로그성 데이터의 저장에 사용

레디스에서 키를 관리하는 법


키의 자동 생성과 삭제

  1. 키가 존재하지 않을 대 아이템을 넣으면 아이템을 삽입하기 전에 빈 자료 구조 생성
    • 저장하고자 하는 키에 다른 자료 구조가 이미 생성되어 있을 때 아이템을 추가하는 작업은 에러 반환
  2. 모든 아이템을 삭제하면 키도 자동으로 삭제됨(stream은 예외)
  3. 키가 없는 상태에서 키 삭제, 아이템 삭제, 자료 구조 크기 조회 같은 읽기 전용 커맨드를 수행하면 에러를 반환하는 대신 키가 있으나 아이템이 없는 것 처럼 동작

키와 관련된 커맨드

command설명
EXISTS키가 존재하는지 확인
KEYS레디스에 저장된 모든 키 조회, 한 번에 모든 키를 반환 ➡️ 다른 클라이언트가 무한정 대기하면서 페일 오버 발생 가능
SCANKEYS를 대체해 키를 조회할 때 사용, 커서를 기반으로 특정 범위의 키만 조회
SORT키 내부의 아이템을 정렬해 반환, list, set, sorted set에서만 사용 가능
RENAME/RENAMENX키의 이름 변경
COPYsource에 지정된 키를 destination 키에 복사
OBJECT키에 대한 상세 정보 반환
FLUSHALL레디스에 저장된 모든 키 삭제
DEL키와 키에 저장된 모든 아이템 삭제, 동기적으로 작동
UNLINK키와 데이터 삭제, 백그라운드에서 다른 스레드에 의해 처리되며 우선 키와 연결된 데이터의 연결 끊음
EXPIRE키가 만료될 시간을 초 단위로 정의
EXPIREAT키가 특정 유닉스 타임스탬프에 만료될 수 있도록 키의 만료 시간 직접 지정
EXPIRETIME키가 삭제되는 유닉스 타임스탬프를 초 단위로 반환, 키가 존재하지만 만료 시간이 설정되어 있지 않은 경우에는 -1, 키가 없을 때는 -2 반환
TTL키가 몇 초 뒤에 만료되는지 반환, 키가 존재하지만 만료 시간이 설정되어 있지 않은 경우에는 -1, 키가 없을 때는 -2 반환
profile
Backend Developer👩🏻‍💻

0개의 댓글