인메모리 저장소에 대해 다룬다.
레디스는 in memory DB이다.
우리가 개발 중 흔히 사용한 MySQL이나 Oracle은 RDBMS 즉, 관계형 데이터베이스 라고 불린다.
테이블
의 형태로 데이터를 저장한다는 특징이 있다.
영속성과 일관성에 집중되어있기 때문에 우리가 DB에 데이터를 저장하고 컴퓨터를 껐다 키더라도 해당 DB의 정보들은 사라지지않은채 다시 사용 가능하다.
보통 HDD나 SSD에 데이터를 저장한다. -> 상대적으로 느린 변경 속도를 가져온다.
Redis의 경우 in memory DB이다.
하드 드라이브 대신 RAM에 데이터 정보를 저장하기 때문에 데이터 접근 속도가 빨라진다.
RDBMS에 들어가는 정보와 다르게 일시적으로 다뤄져야하는 정보의 경우 영속성의 성질을 잃어도 큰 문제가 없다.
그렇기에 보통 장바구니나 로그인 정보에 인메모리 DB를 사용하게 된다.
물론 in memory DB의 경우 여러 장단점이 존재하고, 이 장단점을 파악해 적절한 곳에 사용해야한다.
RAM에 데이터 저장을 하기 때문에 상대적으로 빠르다.
상대적으로 빠르기 때문에 처리량이 높다.
용량의 크기가 제한적이다.
서버 장애 발생 시 데이터가 손실될 가능성이 있다.
Redis는 NoSQL이라고도 할 수 있다.
관계형 데이터베이스가 아니기때문에 테이블 형태가 아닌 key-value 형태를 띄고 있다.
평소에도 NoSQL이라는 이름을 많이 들어봤다. NoSQL은 무엇일까?
처음에는
SQL이 아니다(NO)
인줄 알았다.😅 ㅋㅋㅋㅋㅋ..
그런데 No가 Not Only의 약자로 SQL뿐만 아니라 여러 유형의 데이터베이스를 사용한다는 의미이다.
- 오 그런데 처음에는 SQL 안쓴다 라는 의미에서 No가 맞다고 한다. 이후에 SQL 또한 지원이 0.해석이 바뀌었다.
일반적인 RDBMS의 경우 아래와 같이 SQL문을 사용하여 데이터에 접근하거나 변경, 삭제를 수행한다.
SELECT * FROM USER;
그런데 NoSQL의 경우 SQL뿐 아니라 다른 문법도 사용한다.
SET greeting "Hello, Redis!"
GET greeting
위와 같은 Redis 명령어를 사용한다.
웹 기술이 발전하면서 데이터의 크기가 증가하고 데이터들이 독특해지고 일관성보다는 확장성과 유연성을 더 생각하면서 NoSQL을 많이 사용하고 있다.
ex) Redis, MongoDB, cassandra, etc.
위에서 언급한 예시를 봐보자
SET greeting "Hello, Redis!"
GET greeting
SET, GET의 경우 너무 당연하게도 값을 초기화하는 명령어와 불러오는 명령어이다.
특징이 있다면 SET, GET은 데이터의 자료형이 String 즉, 문자열 데이터
를 처리하기위한 명령어 들이다.
SET, GET을 사용했다는 말은 String 형태의 값을 초기화, 불러온다 라는 뜻
greeting의 자리는 Key 값이 오는 자리이고, 다음 "Hello, Redis!" 자리는 value 값이 오는 자리이다.
GET + key 값을 이용해 key와 매핑되어있는 value 값을 가져오면 된다.
Redis는 거대한 Map<> 구조와 같다 !
자바와는 다르게 SET을 통해 문자형태의 1
을 초기화했더라도 정수에 사용하는 명령어를 사용할 수 있다.
예를 들어 INCR(수 증가), DECR(수 감소)가 있다.
SET num "123"
INCR num ---------------> "124"
DECR num ---------------> "123"
한번에 여러값을 다루고 싶을때는 MSET, MGET을 사용한다.
MSET name kimjeongyoung age 26
MGET name age
name 으로는 kimjeongyoung age로는 26이 들어간다.
tocharArray나 toByteArray 같은 메소드들도 사용할 수 있다.
여기서 알 수 있는 점은 문자열
이라고는 말 하지만 바이트로 나타낼 수 있는 모든 데이터 형태 예를 들어 음성파일이나 영상 같은 데이터들도 문자열로 다루어진다.
리스트를 사용해 스택, 큐등의 자료구조도 구현 할 수 있다.
LPUSH user:list kim
LPUSH user:list tom