레디스란(레디스 기본개념)

임종혁·2024년 12월 22일

레디스란 (레디스 기본 개념)


  • 레디스는 고성능 키- 값 유형의 인메모리 NoSQL 데이터베이스로 오픈 소스 기반의 데이터 저장소

온디스크 데이터베이스 특징


  • 데이터 영구 저장
  • 자주 사용되는 데이터는 캐싱돼 메모리 올라와 있는 겨우도 있지만 그렇지 않은 데이터를 찾고자 할때 직접 디스크에 가서 데이터를 검색하는 과정을 거쳐야함
  • SSD와 HDD 같은 디스크에 접근하는 속도는 RAM 과 같은 메모리 접근 속도 보다 현저히 느림
  • 디스크 접근하는 빈도 증가할수록 시스템 성능 저하

인메모리 데이터 베이스


  • 모든 데이터가 컴퓨터의 메모리에서 관리
  • 디스크 접근 없어 굉장히 빠름

Redis


  • 단순성
    • 문자열 뿐만 아닌 hash set 등 복잡하고 당양한 데이터 구조를 저장할 수 있도록 지원
      • 임피던스 불일치 해소
  • 스레드 하나
    • 사용자가 오래 걸리는 커맨드 수행시 다른 사용자는 그 쿼리가 완료 될때 가지 대기 할 수 밖에 없음
      • 즉 인적 장애가 발생할 가능성이 매우 높다
  • 고가용성
    • 데이터를 여러 서버에 분산 시킬수 있으며 센티널은 장애 상황을 탐지해 자동으로 페일 오버 시켜줌
    • 레디스 클러스터 모드 사용시 손쉬운 수평적 확장 가능
    • 클러스터 내 자동으로 샤딩된 후 저장 여러개의 복재본 생성
    • 데이터 분리는 데이터 베이스 레이어에서 처리되며 애플리케이션에서는 대상 데이터가 어떤 샤드에 있는지 신경 쓰 지 않아도 됨
    • 버스 라는 프로토콜로 레디스 인스턴스 들이 서로 감시

데이터 저장소로서의 데이터


  • 레디스의 데이터는 AOF RDB 형식으로 디스크에 주기적으로 저장 할 수 있음

레디스 기본 개념


레디스 자료구조


String


key value

  • string은 레디스에서 데이터를 저장할 수 있는 간단한 자료구조ㅓ
  • 최대ㅑ 512MB 문자열 데이터 저장
  • 모든 종류 문자열이 binary-safe 하게 처리되어 JPEG 이미지와 바이트 HTTP 응답값등 다양한 데이터 저장하는 것도 가능
SET hello world

GET hello
"world"

이때 hello 라는 키에 다른 값이 연결되어 있다면 새로 입력된 값으로 대체

  • set과 함께 nx 옵션과 사용하면 지정한 키가 없을때 새로운 키 지정

  • xx옵션은 키가 있을때만 새로운 값으로 덮어쓰며 새로운 키 생성하지 않도록 동작

  • INCR, INCRBY 와 같은 커맨드 이용시 string 자료 구조에 저장된 숫자를 원자적으로 조작

SET counter 1000

INCR counter 
(integer) 101

INCRBY counter 50
(integer) 151
  • 즉 INCR 은 1씩 증가 INCRBY 는 해당 수 만큼 증가

  • DECR, DECRBY SMS QKSEO

  • 커맨드는 원자적

    • 즉 여러 클라이언트가 경쟁 상태를 발생 시킬 일이 없음을 의미
    • 커맨드를 수행하는 타이밍이나 순서에 따라 이미 실행한 커맨드가 무시되거나 중복처리돼 수행결과가 달라지지 않음

LIST


  • 레디스에서 list는 순서를 가지는 문자여 ㄹ 목록

  • 하나의 list는 최대 42억여개의 아이템 저장 가능

  • list는 스택과 큐로 이용

  • LPUSH

    • 리스트 왼쪽에 데이터 추가
  • RPUSH

    • 리스트 오른쪽 데이터 추가
  • LRANGE

    • LIST에 들어있는 데이터 조회
LPUSH mylist E
1
RPUSH mylist B
2

LPUSH mylist  DACBA

LRANGE mylist 0 -1
"A"
"B"
"C"
"A"
"D"
"E"
"B"

LRANGE mylist 0 3
"A"
"B"
"C"
"A"
  • LPOP

    • 왼쪽 제거
  • LTRIM

    • 해당 범위 내 있지 않음 제거
  • LPUSH와 LTRIM 커맨드를 사용시 고정된 길이 큐를 쉽게 유지할 수 있음

    • 로그데이터를 일단 쌓고 주기적으로 배치 처리를 이용해 삭제하는것보다 LPUSH LTRIM 사용시 훨씬 효율적
  • LPUSH, RPUSH , LPOP RPOP 은 O(1) 로 처리 할 수 있어 매우 빠른 실행 가능

    • LIST 중간 데이터 접근시 O(N) 으로 처리 LIST에 저장된 데이터가 늘어남에 따라 성능 저하
  • LINSTER 는 원하는 데이터 앞이나 뒤에 데이터 추가 가능

    • 앞에 추가 시 BEFORE 옵션
    • 뒤에 추가시 AFTER 옵션 사용
    • 데이터 없음 오류
  • LSET 커맨드는 지정한 인덱스의 데이터를 신규 입력하는 데이터로 덮어 쓰기

    • LIST의 범위 벗어난 인덱스 입력시 에러 반환
  • LINDEX 커맨드 사용시 원하는 인덱스 데이터 확이

Hash


  • 레디스에서 hash는 필드 - 값을 쌍을 가진 아이템 집합

  • 필드는 하나의 hash내에서 유일하며 필드와 갑 모두 문자열 데이터로 저장

  • hash는 객체를 표현하기 적절한 자료구조 이며 관계형 데이터베이스 테이블 데이터로 변환하는것도 간편

  • HSET

    • 한번에 여러 필드 - 값 쌍을 저장 가능
HSET Product:123 NAME "HAPPY HACKING"
HSET product:123 TypeID 35
HSET Product:123 Version 2002
HSET Product:234 Name "Track Ball" TypeID 32
  • HGET
    • 해시 자료구조의 키 와 아이템 필드를 함께 입력
    • HMGET 커맨드 이용시 하나의 HASH 내에서 다양한 필드 값 가져올수 있음
    • HGETALL 은 해시 모든 필드 값쌍을 차례로 반환
HGET Product:123 TypeID
"35"

HMGET Prduct:234 NAME TypeID
"Track Ball"
"32"

HGETALL Product:234
"Name"
"Track Ball"
"TypeID"
"32"

SET


  • 정렬되지 않은 문자 모음

  • 중복되서 저장되지 않으며 교집합 합집합 차집합등 집합 연산 과 관련 커멘드 제공 객체간 관계를 계산하거나 유일한 원소 구해야 할 경우 사용

  • SADD

    • 한번에 여러 개 아이템 저장하는 것 가능
  • SMEMBERS

    • SET 자료 구조에 저장된 저체 아이템 출력, 저장한 순서 관계없이 렌덤 출력
  • SREM

    • SET에서 원하는 데이터 삭제
  • SPOP

    • SET 내부 아이템중 랜덤 하나의 아이템 반화 ㄴ동시에 삭제
  • SUNION 합집합

  • SINTER 교집합

  • SDIFF 차집합

Sorted Sets


  • 스코어 값에 따라 정렬되는 고유한 문자열 집합

  • 모든 아이템은 스코어 값 쌍을 가짐

  • 저장 될 때부터 스코어 값으로 저장

  • 같은 스코어를 가진 아이템은 데이터 사전순으로 정렬돼 저장

  • 데이터 중복 없이 저장되므로 set과 유사하다 볼수 있으며 각 아이템은 스코어라는 데이터와 연결되어 있어 hash와 유사하다 볼수 있음

  • ZADD

    • 스코어 값 쌍으로 입력하여 sorted sets에 저장
ZADD score:220817 100 user:B

ZADD score:220817 150 user:A 150 user:C 200 user:F
  • 만약 저장하고자 하는 데이터가 이미 sorted set에 속해 있다면 스코어만 업데이트 되며, 업데이트된 스코어에 의해 아이템 재정렬

  • 지정한 키가 존재하지 않을때 sorted set 자료 구조를 새로 생성 키가 이미 존재하지만 sorted set 이 아닐 경우 오류 반환

  • XX

    • 아이템이 이미 존재할대 스코어 업데이트
  • NX

    • 아이템이 존재하지 않을때 시뉴 삽입하며, 기존 아이템의 스코어를 업데이트 하지 않는다
  • LT

    • 업데이트하고자하는 스코어가 기존 아이템 스코어보다 작을때만 업데이트
    • 기존 아이템이 존재하지 않ㅇ르 시 새로운 데이터 삽입
  • GT

    • 업데이트 하고자하는 스코어가 기존 아이템 스코어보다 클대 업데이트
    • 기존 아이템이 존재하지 않을시 새로운 데이터 삽입
  • ZRANGE 커맨드 사용시 Sorted set에 저장된 데이터를 조회할 수 있다.

  • WITHSCORE 옵션 사용시 데이터와 함께 스코어 값이 차례대로 출력 REV옵션 사용시 데이터는 역순으로 출력

ZRANGE score:220817 1 3 WITHSCORES
"user:A"
"150"
"user:C"
"150"
"user:F"
"200"
  • BYSCORE 옵션
    • 스코어를 이용해 데이터 조회
ZRANGE score:220817 100 150 BYSCORE WITHSCORES

100 150 스코어 조회

  • ( ANSWK CNRKTL GOEKD TMZHDJFMF VHGKAGKWL DKSGSMS RKQTAKS WHGHL RKMSD
  • -inf +inf 사용하여 보다큰 보다 작은 스코어 조회 조회
  • 역순으로 조회 하고 싶으면 WITHSCORES 뒤에 REV
ZRANGE score:220817 +inf 200 BYSCORE WITHSCORES REV 
  • BYLEX 옵션 사용시 사전식 순서를 이용해 특정 아이템 조회

레디스 키 관리법


  • stream 이나 set, sorted set, hash 와 같이 하나의 키가 여러개의 아이템을 가지고 있는 자료 구조에서는 명시적으로 키를 생성하거나 삭제하지 않아도 키는 알아서 생성 삭제

  • 키 생성 세가지 곹오 규칙

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

키 관련 커맨드


  • EXISTS

    • 키가 존재하는지 확인하는 커맨드 존재하면 1 존재하지 않음 0
  • KEYS

    • 레디스에 저장된 모든 키를 조회하는커맨드
    • 매칭되는 패턴에 해당되는 모든키의 LIST 반환
  • SCAN

    • KEYS를 대체해 키를 조회할때 사용할 수 있는 커맨드
    • 커서 기반으로 특정 범위의 키만 조회할 수 있어 비교적 안전하게 사용 가능
  • SORT

    • list , set , sorted set에서만 사용할 수 있는 커맨드
    • 키 내부 아이탬을 정렬해 반환
  • RENAME/ RENAMENX

    • 키 이름 변경 커맨드
    • RENAMEMNX 는 오직 변경할 키가 존재하지 않을때 동작
  • COPY

    • Source에 저장된 키를 destination 키에 복사
    • destination 지정 키가 이미 있는 경우 에러 반환
    • replace 옵션 사용시 destination 키를 삭제한 뒤 값 복사하기 때문에 에러 발생하지 않ㅇ므
  • Type

    • 지정한 키 자료구조 타입 반환
  • OBJECT

    • 키 상세 정보 반환
  • FLUSHALL

    • 저장된 모든 키 삭제
    • SYNC 한 방식으로 동작
    • ASYNC 옵션 사용시 FLUSH는 백그라운드로 실행
      • 커맨드가 수행됬을때 존재했던 키만 삭제해 FLUSH 되는 중 새로 생성된 키는 삭제 되지 않음
  • DEL

    • 키 와 키에 지장된 모든 아이템 삭제
    • 동기적 작동
  • UNLINK

    • DEL 과 비슷하게 키와 데이터를 삭제하는 커맨드
    • 다른 스레드에 의해 처리
    • 키와 연결된 데이터 연결 끊기
  • EXPIRE

    • NX 해당 키에 만료 시간이 정의돼 있지 않은 경우 수행
    • XX 해당 키 만료 시간 정의 돼 있을시 수행
    • GT 현재 키가 가지고 있는 만료시간 보다 새로 입력한 초가 더 클때 수행
    • LT 현재 가지고 있는 만료 시간 보다 새로 입력한 초가 더 작을 때 수행
  • EXPIREAT

    • 키가 특정 유닉스 타임 스탬프에 만료될 수 있도록 키의 만료 시간 직접 지정
  • EXPIRETIME

    • 키가 삭제 되는 유닉스 타임스탬프를 초 단위 반환
    • 만료 시간 설정 돼 있지 않은 경우 -1
    • 키가 없을 시 -2
  • TTL

    • ZLRK AUCCH ENL AKSFYEHLSMSWL QKSGHKS

0개의 댓글