📌 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
✅ 데이터 유형
- 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"}'
- ZADD key score member
- 삭제
- 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