Redis 기본 개념
Redis 란?
- Redis 는 NoSQL 의 한 종류이다.
- REmote DIctionary Server 를 의미
NoSQL 이란?
NoSQL은 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매무 최적화된 키 값 저장 공간으로 레이턴시와 스루풋과 관련하여 상당한 성능 이익을 내는 것이 목적이다.
출처 : https://ko.wikipedia.org/wiki/NoSQL
기존 관계형 데이터베이스와는 조금 다는 목적성을 가진 데이터베이스 입니다.
데이터베이스 분선처리, 빠른 쓰기, 데이터의 안정성등 빠른 퍼포먼스를 내기 위해 사용되는 것입니다.
NoSQL 의 종류
- Key-Value 형
- 특정 데이터에 대해서 key/value 형태로 저장하는 데이터로 구현하기 쉬우나 일부를 읽거나 업데이트에는 비효율적이다.
- 종류
- Tokyo Cabinet
- Redis
- Voldemort
- Oracle BDB
- Amazon SimpleDB
- Column family 형
- 여러 서버에 분산된 수많은 데이터를 저장,처리 하기 위해 만들어짐
- Key-Value 형 처럼 Key를 사용하지만 Key-Value 형과 다르게 여러개의 컬럼을 가리키고 있고 컬럼은 컬럼 패밀리에 따라 정렬된다.
- 종류
- Cassandra, HBase
- Document DB 형
- 기본적으로 Key-Value 와 비슷함
- json과 xml 형태로 많이 저장함.
- 종류
- CouchDB, MongoDB
- Graph 형
- SQL 은 Row, Column 기반의 테이블과 정형화된 구조를 가짐
- SQL 대신 유연한 graph model 을 여러 서버들에 확장할 목적으로 사용 가능
- DB 조회는 데이터 모델에 기반함
- 종류
- Neo4J, InfoGrid, Infinite Graph
Redis 특징?
- In-Memory Data Structure Store
- 디스크가 아닌 메모리 기반
- In-Memory Cache : 캐시 방식을 통해 DB Read 부하를 감소시키는 방법
- 리스트, 배열 형식의 데이터 처리에 특화 됨
- value 값으로 문자열, 리스트, set, sorted set, hash 형 등 여러 데이터 형식을 지원
- 리스트 형 데이터의 입력과 삭제가 MySQL 에 비해 10배 정도 빠르다.
- 여러 프로세스에서 동시에 같은 Key 에 대한 갱신을 요청할 경우 Atomic 한 처리로 데이터 부정합 방지. Atomic 처리 함수를 제공
- 메모리를 활용하면서 영속적인 데이터 보존
- 명령어로 명시적으로 삭제하거나 expires 를 설정하지 않으면 데이터를 삭제하지 않는다.
- 스냅샷 기능을 제공하여 메모리의 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.
- 싱글 스레드 이기 때문에 atomic 하게 동작한다.
- 즉, 한번에 하나의 행동이 되는 것을 보장한다.
- Open 소스
- NoSQL & Cache 솔루션이며 메모리 기반으로 구성
- 여러대의 서버 구성 가능
- 지원되는 데이터 구조
- Strings, sets, sorted-set, hashes, list
- Hyperloglog, bitmap, geosptial index
- 성능은 서버에 따라 다르나 초당 2만 ~ 10만회 수행
Cache 를 왜 사용하는가?
Cache : 요청에 대한 결과를 미리 저장하였다가 빠르게 서비스 해줄 수 있음
보통 DB 는 CRUD 시 DISK에 저장되고 있기 때문에 많은 용량을 저장할 수 있다라는 장점은 있으나 그만큼 소요시간이 많이 걸린다. 그러나 Cache는 메모리를 사용하기 때문에 속도가 빠르다.
Redis 커맨드
- Redis 는 기본 형태로 key-value 로 데이터를 저장함
- key와 관련된 커맨드
- EXIST : 해당 key가 존재하는지 확인
- DEL : Key 삭제
- TYPE : key와 value가 어떤 타입을 사용하는지 반환
- SCAN : Key의 목록을 커서 단위로 가져옴
Redis 운영시 참고 사항
- 메모리는 한정적인 경우가 많으므로 대부분 key에 Expire를 설정할 것을 권장
- 동일한 key가 들어오는 경우 timeout 이 재설정 됨
- Expire 는 collection 의 각각 item 에 개별적으로 걸리지 않고 전체 Collection에 대해서만 걸림
- → 즉 해당 1000개의 아이템을 가진 collection이 expire 이 설정 되어 있다면 해당 시간 이후에 1000개의 아이템이 모두 삭제 됨
- 메모리 관리를 잘해야 한다.
- Physical Memory 를 사용할 경우 문제가 발생할 수 있음→ swap 이 있다면 Max memory 를 설정해도 이보다 더 사용할 가능성이 큼
- → swap 이 있다면 swap 사용으로 해당 메모리 page 접근시 마다 latency 가 발생
'개발 > 이론' 카테고리의 다른 글
JWT 란? (0) | 2021.12.08 |
---|---|
OSI7계층/네트워크 통신의 7계층 (0) | 2020.11.29 |