레디스는 데이터베이스
, 캐시
, 메세지 브로커의
역할을 한다. In-memory 자료구조 Store로서, 다양한 자료구조를 제공한다.
즉 모든 데이터를 메모리에 저장하고 조회한다는 건데 이를 통해 기존 관계형 데이터베이스(RDB)보다 빠른 속도를 보여준다. 메모리접근이 디스크 접근속도보다 월등히 빠르기때문이다.
레디스는 아래와같이 다양한 자료구조는 Key - Value
형태로 저장한다.
또한 레디스는 SingleThread
로 동작하고, Critical Section에 대한 동기화를 제공한다. 이를통해 트랜잭션의 문제를 해결할 수 있는데, 레디스의 모든 자료구조가 Atomic
하기 때문이다. 따라서 race condition을 피해 데이터의 정합성을 보장하기 쉽다.
즉 서로다른 Transaction의 Read/Write 동기화를 지원하여 데이터의 일관성을 유지해준다.
따라서 여러 서버에서 같은 데이터를 공유할때 혹은 싱글서버인 경우에도 캐싱의 역할을 하기 위해 사용한다.
→ 레디스는 개발을 단순화해주고, Single Thread이므로 빠른 처리를 지원한다(컨텍스트 스위칭의 부담이 적기 때문에)
캐시란 나중의 요청에 대한 결과를 미리 저장해놓았다가 빠르게 사용하는 것을 의미한다.
CPU Register, CPU Cache(SRAM), DRAM(main Memory), Storage(SSD,HDD)순으로 캐싱의 속도가 느려진다. 다만 속도가 빠를수록 가격이 비싸고 용량의 제한이 높다.
> set hello world
OK
> get hello
"world"
string타입에는 모든 종류의 문자열을 저장할 수 있다. JPEG이미지를 저장하거나 HTML fragment를 캐시하는 용도로 자주 사용한다.
string을 정수로 파싱하고, 이를 atomic하게 증감하는 커맨드
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152
키를 새 값으로 변경하고 이전 값을 반환하는 커맨드
> INCR mycounter
(integer) 1
> GETSET mycounter "0"
"1"
redis> GET mycounter
"0"
키가 이미 존재하거나, 존재하지 않을 때에만 데이터를 저장하게 하는 옵션
> set mykey newval nx
(nil)
> set mykey newval xx
OK