2018. 7. 18. 02:05 Database/DB_Redis
Redis 공부하기-1
eeRedis란 무엇인가에 대해서 간단하게 알아보자
Redis의 기능은 캐쉬서버라고 볼 수 있다.
우선 캐쉬서버란 무엇인가?
우리가 게임을 플레이하고 있다고 생각을 해보자.
클라이언트와 서버는 유저의 행동에 따라서 무수히 많은 통신을 하고
게임 로직에 의거하여 플레이어의 정보를 수정, 갱신을 하게 된다.
만약 우리가 이러한 작업을 할 때 단순히 MYSQL등의 DB만을 사용한다면 어떻게 될까?
무수히 많은 SELECT 요청과 UPDATE 혹은 DELETE요청이 상대적으로 느린 DB에 쌓여서
유저의 정보를 처리하는데에 많은 시간이 소요될것이고
이에 따라서 서버에는 많은 과부하가걸릴 것이다.
이러한 문제를 해결하기 위해서 선택한 것이 메모리에서 해당 정보를 지닌채로
조회등의 요청이 올 시 메모리를 참조하게하고 데이터 갱신 등의 작업 시
우선 메모리를 갱신 한 후 DB에 적용하는 방법이다.
이러한 방식을 사용하는것이 Redis, Memecached 등등의 캐시 시스템인 것이다.
Memcached와 redis의 차이점은 추후 다른 글에서 자세히 알아보고
우선은 Redis의 특징에 대하여 알아보자.
1. Redis는 영속성을 지원하는 인 메모리 데이터 저장소이다.
2. read 측면에서 성능을 향상시키기 위한 서버측 복제를 지원한다.[master, slave 서버]
3. write측면에서 성능을 향상시키기 위한 클라이언트 측의 샤딩을 지원한다.
4. ANSI C으로 작성되어 ANSI C컴파일러가 동작하는 곳이면 어디든 설치,실행이 가능하다.
5. Redis client는 다양한 언어로 포팅되어 있다.
6. 다양한 서비스에 활용되고 있으며 이를 통해 성능적으로 검증되었다.
7. 다양한 Data 형을 지원한다.
8. 메 모리 외의 영구 저장소를 지원하므로 instance 재시작에 대한 CacheWarmUp을 고려하지 않아도 된다.
출처 : http://blog.naver.com/PostView.nhn?blogId=newamsterdam99&logNo=220588699370&parentCategoryNo=6&categoryNo=&viewDate=&isShowPopularPosts=true&from=search
- ANSI C 란?
ansi c란 American Mational Standards Institute 의 약자로 미국에서 공인된 표준이지만 현재는 국제적으로 공인된 C의 표준이다.
이 표준의 목적은 C기반 Program들의 형식과 이를 해석하는 방식을 명시함으로써,
C언어 기반 Program의 이식성, 신뢰성, 유지보수성, 효율적인 실행을 증진시키는 것이다.
-> 현재 대부분의 C컴파일러는 해당 표준을 준수한다.
- Redis가 지원하는 Data형의 종류
String : 문자열 및 숫자, 바이너리 이미지등을 저장가능.[최대 512MB]
Set : 하나의 키값에 대한 여러 값을 저장, Set간의 연산으로 교집합, 합집합을 계산할 수 있다.
Sorted Set : 내부의 값들을 오름차순으로 저장한다.
Hashes : 해싱된 키값과 이에 대한 String을 저장
List : String들의 집합으로 LinkedList와 흡사, push와 pop으로 데이터 추가,제거가 가능하다.
- CacheWarmUp이란?:
자세한 내용은 외국 블로그 번역 게시판 참고
- Sharding이란?
수평분할과 샤딩이라는 것이 있는데 우선 수평분할(horizontal pratialing)의 경우 동일한 스키마를 지닌 다른 테이블에 데이터를 저장하는 것을 의미한다.
이러한 방법은 인덱스의 크기를 줄이고 작업 동시성을 늘리기 위한 것이다.
이와 달리 샤딩은 동일한 스키마를 지닌 물리적으로 다른 DB에 데이터를 저장하는 것을 의미한다. 샤딩의 경우 다른 DB에 데이터가 존재하는 것이기 때문에 몆몆 기능적인 부분에서 제약이 존재한다.(예 : join의 경우, 일관성 유지, 데이터의 복제 등등)
간단히 말하자면 하나의 DB에 담기 방대한 자료를 동일 사양, 동일 내용의 다른 DB에 저장하는 것을 Sharding이라고 한다.