- 고성능의 키-값(key-value) 저장소로, 거대 맵(Map)데이터 저장소 형태를 가지고 데이터를 메모리에 저장하여 빠른 읽기와 쓰기를 지원.(sql 쿼리 사용 불필요)
- 맵 데이터 저장소 형태이기 때문에 매우 빠르다. (데이터 위치 확인이 매우 빠름)
- 기본적으로 해시함수를 사용한다. + 해시 테이블 사용
- 키를 생성하면 생성 직후 해시값과 그 키에 대한 물리적인 주소를 매핑시켜놓는다.
- 데이터 베이스 16개가 자동으로 생성.
- 기본 접속 시 0번 데이터 베이스로 접속
- 1번데이터베이스 접속시 : select 1
- 0-15번 까지 데이터 베이스가 있음
- 총 16개 (추가가능)
- 주로 캐싱, 세션관리, DB 동시성 제어 등에서 다양한 목적으로 사용
- 세션 (로그인 인증값)
- 난수값을 저장해놓고 해당 난수값이 있는지 없는지 확인하여 사용가능
- 세션관리 이유 : 굉장이 빈번하게 조회가 되기 때문에 빠르게 처리할 수 있는 redis에 올려둠
- DB 동시성 제어
- RDBMS에서 동시성 제어로 A가 select문으로 조회 중일 때 B는 A로인해 락이 걸려서 조회를 못하여 속도가 느려지는 상황에서 redis를 활용하면 성능이 좀 빨라진다.
- 세션 (로그인 인증값)
- 싱글 스레드 구조로 동시성 이슈 발생 X
- redis는 비동기적으로 동작하다보니까 싱글스레드여도 빠르게 처리 가능하다.
- 동기 : 사용자의 request부터 → spring의 thread 1개 할당 → db 조회 → 사용자의 요청에 맞는 데이터 조립 → response
- 비동기 : 작업을 thread가 할당처리 → 모두 다 완료될 때까지 기다리지 않는다. → 작업의 처리를 위임하고, 다른 사용자의 요청을 받으러 갑니다. (처리결과를 기다리지 않고 다음 처리를 위해 움직이기 때문에 동기적 방법보다 비동기가 더 빠르다.)
- redis 자료구조
- Strings : 텍스트나 숫자 저장
- 키에 값을 설정 : SET key value
- 키의 값을 가져옴 : GET key
- NX 문법 : set key value NX
- EX 문법 : 만료시간, set key value ex 10
- list : 순서가 있다, 중복이 가능
- 데이터 추가 : LPUSH, RPUSH
- 데이터 추출 : LPOP key, RPOP key
- 데이터 개수 : LLEN key
- member 조회 : lrange key명 start end, 만약 끝까지 조회면 end에 -1
- ex) lrange my_classes_name 0 -1
- TTL(Time To Live), 즉 유효시간 사용
- 만료시간 지정
- EXPIRE mykey 3600
- 여기서 만료시간은 초단위
- ttl [key]
- 남은 만료시간 확인
- 만료시간 지정
- set : 순서가 없고, 중복이 없다. ⇒ 집합개념
- set(집합)에 멤버 추가
- SADD myset membe
- set(집합)의 모든 멤버 반환
- SMEMBERS myset
- set의 멤버 개수 변환
- SCARD myset
- 특정 멤버 삭제
- SREM myset member1 member2
- set(집합)에 멤버 추가
- zset : 사용자의 점수나 순위를 관리하는데 사용
- 순서를 어떤 기준으로 보장하고 싶을 때
- ZADD key score member
- score : 멤버를 정렬하는데 사용되는 점수
- member형식을 json 형식으로도 가능
- ex) zadd my_key 1 ‘{”hello”:”world”}’
- ZREM key member
- 특정키의 특정멤버 삭제
- ZRANK key member
- 특정멤버의 위치 정보 반환
- ZRANGE key명 0 -1
- score기준 오름차순 조회
- ZREVRANGE stock_prices 0 -1
- score기준 내림차순 조회
- Strings : 텍스트나 숫자 저장
- 주요 명령어
- 모든 key값 조회
- keys *
- 키 삭제
- DEL key명
- 전체 key 삭제는 FLUSHDB(현재 데이터베이스의 모든 key 삭제)
- 모든 key값 조회
'DB STUDY > DB Practice' 카테고리의 다른 글
MYSQL 3개 테이블 LEFT JOIN하기(두번 JOIN) (0) | 2023.11.27 |
---|---|
MYSQL 1차, 2차, 3차 정규화 진행하기 (3) | 2023.11.24 |
MYSQL ORDER SYSTEM 논리적 데이터 모델링 (2) | 2023.11.24 |
MYSQL Index 설정 후 테이블 조회 성능 향상 확인 테스트 (2) | 2023.11.23 |