230408 TIL #54 Redis

김춘복·2023년 4월 7일
0

TIL : Today I Learned

목록 보기
54/571

230408 Today I Learned

실전프로젝트 2주차. 오늘은 오전에 공부를 하고, 오후에 프로젝트 피드백을 받았다. 오늘의 TIL에는 Redis에 대한 내용을 정리해보려 한다.


Redis

REmote DIctionary Server 원격 딕셔너리 자료구조 서버

Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 DBMS.
DB, 캐시, 메세지 브로커로 사용되며 모든 데이터를 메모리로 불러와서 처리하는 메모리기반 DBMS. 모든 데이터가 서버의 주 메모리에 상주하는 인메모리 방식이라 디스크에 엑세스 할 필요가 없어 매우 빠르게 데이터에 접근이 가능하다.

특징

  • 영속성을 지원하기 때문에 인메모리 저장소지만 프로그램이 종료되더라도 데이터가 사라지지 않는다.

  • Key-Value 구조이기 때문에 쿼리를 사용할 필요가 없다.

  • 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.

  • 싱글 쓰레드로 동작하기 때문에 데이터에 접근할 때 여러 쓰레드들에 대한 동기화를 고려하지 않아도 된다. 하지만 동시에 처리할 수 있는 명령어가 한번에 1개기 때문에 처리시간이 긴 명령어가 들어오면 그 뒤의 명령어가 대기상태가 되어 성능 저하가 일어날 수 있다.
    ex) Keys(모든 데이터 조회), FlushDB(모든 데이터 삭제), Delete Collections(컬렉션 전부 삭제), Get All Collections(컬렉션 전부 조회) 같은 명령어들은 사용 조심!!

  • 복제(Replication)기능이 있어 서버에 장애가 생겨 중단될 경우 기존의 데이터를 지킬 수 있다. 하지만 복제 과정이 비동기적이라 모든 데이터를 가지고 있지 않을 수도 있긴 하다.

  • 샤딩(Sharding) 기능이 있어 데이터를 특정 조건에 나누어 저장할 수 있다. 샤딩을 통해 더 많은 데이터를 저장하고, 쓰기 성능을 개선할 수 있다.


자료구조

  • 기본적인 Key의 자료형은 String이지만 Value는 다양한 타입을 지원한다.
    Lists, Sets, Sorted Sets, Hashes 등의 자료구조를 사용가능하다.

  • String : 가장 기본적인 자료구조. 문자열을 저장하고 조회. 문자열 외에도 정수, 실수 등의 숫자 데이터도 저장 가능. 삽입과 조회에 O(1)

  • Lists: 여러 아이템을 순서대로 저장하는 Array 형식의 데이터 구조.
    데이터 삽입의 시간복잡도는 맨 앞이나 맨뒤에 넣기 때문에 O(1), 조회 시 O(N)
    큐나 스택으로 사용할 수 있고, 고정된 길이로 사용해 데이터가 넘치면 버릴 수 있다.
    스택 방식으로 최근 방문 페이지, 타임라인, 최근 방문자 등에 사용이 가능하다.

  • Sets: 순서 보장이 안되지만 중복을 허용하지 않는 자료구조. 집합 연산을 지원해(교집합, 합집합 등) 유저간 관계나 태그, 관심사 등을 표현하는데 유용하다.
    삽입에 O(1), 하나 조회시 O(1), 전체 조회시 O(N), 집합 조회시 O(N) 이상

  • Sorted Sets: Sets와 유사하지만 Key-value 뒤에 Score를 지정할 수 있다. Score를 기준으로 정렬된 상태로 저장된다.
    삽입 제거에 O(log N), 범위 조회시 O(log (N) + M), key로 조회시 O(log N)

  • Hashes : Key-value 쌍을 저장하고 조회하는 자료구조. 큰 객체도 저장할 수 있어 대규모 객체를 캐싱할 때 매우 유용하다. 하나의 Key 안에 여러 필드와 값을 저장할 수 있어 관련된 데이터를 그룹화 하는데 유용하다.
    key field를 아는 상태에서 삽입, 조회에 O(1), key만 가지고 조회 할 때는 O(N)


참고사이트

명령어

  1. docker에서 redis cli에 접속
    winpty docker exec -it myredis redis-cli
  2. SET : 값을 저장하거나 덮어쓸 때 사용된다.
    SET keyName "value"
  3. GET : 값을 조회할 때 사용된다.
    GET keyName
  4. DEL : 값을 삭제할 때 사용된다.
    DEL keyName
  5. EXPIRE : 값의 유효기간을 설정할 때 사용된다. (초단위)
    EXPIRE keyName 10
  6. LPUSH, RPUSH : 리스트의 맨 앞(LPUSH)과 맨 뒤(RPUSH)에 값을 추가할 때 사용된다.
    LPUSH listName "world"
  7. LPOP, RPOP : 리스트의 맨 앞(LPOP)과 맨 뒤(RPOP)의 값을 제거할 때 사용된다.
    RPOP listName
  8. INCR, DECR : 값이 정수인경우 1을 올리거나 내릴 수 있다.
    INCR keyName
  9. MGET : 동시에 여러 키를 가져올 때
    MGET key1 key2 key3 key4...
  10. EXIST : value의 존재여부 확인. 있으면 1 없으면 0. 여러 key를 주면 존재하는 개수 반환
    EXIST key1 key2 key3
  11. FLUSHALL : key value 전부 삭제 (조심해서 쓰기!!!)
    FLUSHALL
profile
Backend Dev / Data Engineer

0개의 댓글