본문 바로가기

Back-End 공부

[Database] Redis 데이터 유형 및 기본 명령어(GET, SET, DEL)

📌 Redis

  • 고성능의 키-값(Key-Value) 저장소
  • 거대한 맵(Map) 데이터 저장소형태를 가지고 데이터를 메모리에 저장하여 빠른 읽기와 쓰기를 지원
  • 주로 캐싱, 세션 관리, DB 동시성 제어 등에서 다양한 목적으로 사용
  • ex) RDB에서 자주 조회되는 데이터들을 Redis에 넣어놓고 사용한다.

- 캐싱

  • RSA256 등 해싱함수를 쓰면 같은 input을 넣으면 항상 같은 output을 출력
  • 특정 input에 대한 해싱함수 값을 저장해두고, 같은 input이 들어오면 빠르게 처리 가능
  • 최근 본 사용자 목록 등

 

-세션 관리

사용자의 로그인 성공 인증 값을 저장해두고, 다시 화면에 들어갈 때마다 사용자의 값과 서버에 값과 비교해서 사용자 인증

 

- DB 동시성 제어

Locking을 위한 특정한 키-값을 두고, 락킹 여부를 먼저 조회한 후 프로세스 할당

락킹여부 ='Y' 라면 대기, 'N'라면 락킹='Y' 걸고 프로세스 실행

 

 

 

인메모리(In-memory)? ⭐

컴퓨터의 메인 메모리 RAM에 데이터를 올려서 사용하는 방법

https://zangzangs.tistory.com/72

 

인메모리 데이터 저장소 Redis, 왜 사용할까? #Redis 파헤치기

인메모리 데이터 저장소 Redis 개발을 하다보면 트랜잭션이 많이 발생하는 화면에서 느껴지는 느림(?) 같은 것을 느끼곤 했다. 자주사용되는 하지만 세션에 담고 있기에는 뭔가 모호한 것들을 조

zangzangs.tistory.com

 

 

 

✅ 데이터 유형

  • Strings
    • 텍스트나 숫자 데이터 저장
    • 가장 일반적인 key - value 구조의 형태
  • Lists
    • 순서가 있는 문자열 목록
    •  JAVA의 deque과 비슷
  • Sets
    • 중복을 허용하지 않는 문자열 집합
    • 집합과 비슷
  • Sorted Sets = ZSET
    • 점수가 할당된 문자열로 이루어진 집합
    • 정렬된 순서로 관리
  • Hashes = HSET
    • 키-값 쌍으로 이루어진 데이터 구조

 

✅ 특징

  • key-value로 구성된 단순화된 데이터 구조로 sql 쿼리 사용 불필요
  • 빠른 성능
    • 인메모리 NoSQL 데이터베이스로서 빠른 성능
    • Key-Value는 구조적으로 해시 테이블 사용함으로서 매우 빠른 속도로 데이터 검색 가능
  • Single Tread 구조동시성 이슈 발생X
  • 비동기적으로 동작하기 때문에 속도가 빠르다
  • 윈도우 서버에서는 지원하지 않고, linux 서버 및 macOS 등에서 사용 가능 (도커 사용 시 윈도우도 가능)

동기(멀티 스레드) VS 비동기(단일 스레드)

동기 : 스레드가 많기 때문에 사용자 200명의 요청들을 각각 처리될 때까지 기다려도 된다.

비동기 : 단일 스레드 혼자서 200명의 사용자의 요청을 처리해야되니까 DB한테 request 던져놓은 후,

처리 결과를 기다리지 않고 response 돌아오면 그때 달려가서 또 처리

 

 

✅ Redis 주요 명령어

  • 설치 및 기본명령어
    • sudo apt-get update
    • sudo apt-get install -y redis-server
      • redis-server --version
  • 서버 시작
    • sudo systemctl start redis-server
  • 접속
    • redis-cli
  • 데이터베이스 선택 
    • select 데이터베이스숫자
    • 데이터베이스는 0~15까지로 16개로 구성
    • 최초 접속시 default 0번
  • 키 생성 및 조회
    • SET key value
    • GET key
    • SET key value nx (SET if Not eXists : 값이 있으면 덮어쓰기X)
    • SET key value ex (초단위 만료시간)
  • 모든 Key 값 조회
    • keys *
  • 키 삭제
    • DEL key명
    • 전체 삭제는 FLUSHDB

 

✅ 데이터 유형별 명령어

  • String
    • SET key value
    • GET key
    • SET key value nx (SET if Not eXists : 값이 있으면 덮어쓰기X)
    • SET key value ex 숫자 (초단위 만료시간)
  • Lists
    • 삽입
      • Redis 리스트는 간단한 메시징 큐로 사용될 수 있음 ex) 작업 스케줄링, 캐싱 등
      • LPUSH, RPUSH
      • 큐 : LPUSH & RPOP 혹은 RPUSH & LPOP
    • 추출
      • LPOP key, RPOP key
    • 데이터 개수
      • LLEN key
    • 조회
      • lrange key명 start end
      • 전체 조회 시에는 lrange key명 0 -1 (0:처음, -1:마지막을 의미)
  • TTL(Time To Live)
    • 만료시간 지정
      • EXPIRE key명 숫자 (초단위 만료시간)
    • 만료시간 확인
      • TTL key명
  • Set
    • 중복X 순서X 
    • 고유한 사용자 ID 목록, 이벤트에서 한 번만 참여할 수 있는 사용자 관리 등에 사용 가능
    • set에 멤버 추가
      • SADD myset member
    • 모든 멤버 반환
      • SMEMBERS myset
    • 멤버 개수
      • SCARD myset
    • 삭제
      • SREM myset member1 member2
  • ZSet
    • 주식, 코인 등의 실시간 시세 또는 게임 등의 사용자의 점수나 순위를 관리하는데 사용
    • 추가
      • ZADD key score member
        • score : 멤버를 정렬하는 데 사용되는 점수
        • member형식을 json형식으로도 가능
        • ex)zadd my_key 1'{"hello","world"}'
    • 삭제
      • ZREM key member
    • 특정 멤버 위치 정보 반환
      • ZRANK key member
    • score기준 오름차순 조회
      • ZRANGE stock_prices 0 -1
    • score 기준 내림차순 조회
      • ZREVRANGE stock_prices 0 -1

 

 

💻 Redis 실습

 

Redis 설치

sudo apt-get update

sudo apt-get install -y redis-server

redis-server --version

redis-cli

select 0

exit

 

 

String Get, SET

 

 

List PUSH, POP

 

 

Set

 

ZSet