봉봉의 개인 블로그
2017-11-02(Redis) 본문
Redis 는 Remote Dictionary Server 의 약자이다.
1. 오픈소스 소프트웨어이다.
2. 디스크가 아닌 메모리 기반의 데이터 저장소이다.
3. NoSQL & Cache 솔루션이며 메모리 기반으로 구성된다.
4. 명시적으로 삭제,expire를 설정하지 않으면 데이터는 삭제되지 않는다(영구적 보존)
5. 여러대의 서버 구성 가능하다.
6. 데이터 베이스로 사용될 수 있으며, Cache로도 사용될 수 있는 기술이다.
7. 성능은 서버에 따라 다르나 초당 2만 ~ 10만회 수행한다.
메모리 위에서 동작하는(key-value) 저장소(store)인 레디스는 NoSQL DBMS로 분류되며
동시에 Memcached 와 같은 인메모리(In-memory) 솔루션으로 분리 된다.
Memcached 기반으로 만들어 졌기 때문에 보다 우수하지만 더욱 복잡하며, 다양한데이터
구조체를 지원하기 때문에 Message Queue,Shaerd memory,Remote Dictionary 용도로 사용될수도 있다.
대부분의 언어를 사용할 수 있지만, Linux를 이용하기를 권장하고 있다.
그리고,안전한 데이터의 보관과 백업을 위해 두 가지 방법을 제공한다.
1. 다른 서버의 메모리에 실시간으로 복사본을 남길 수있다.
2. 디스크에 직접 저장하는 방법도 존재한다.
NoSQL 중에서도 Redis가 주목을 받는 이유는
-데이터 저장소로 입력/출력이 가장 빠른 메모리를 채택.
-단순한 구조의 데이터 모델인 Key-Value 방식을 통해 빠른 속도.
-캐시 및 데이터 스토어에 유리
-다양한 API 지원.
[2016.6월 작성된글에서]
Redis는 페이스북, 인스타그램, 네이버 LINE서비스, StackOverflow, 블리자드 등 대형 서비스 업체들이
사용자들의 대규모 메세지를 실시간으로 처리하기 위하여 사용하고 있다.
**In memory cache**
메모리 캐시 기반의 제품이 많은 시스템에서 사용되는 이유는 성능
캐시 방식을 통해 DB Read의 부하를 감소할 수 있기 때문이다.
서비스 요청이 증가하여 DB요청이 많아지면 DB 서버 부하가 증가하게 되는데 메모리 캐시가 적용되면
성능 및 처리 속도가 향상된다.
Redis 의 장점
1. List, 배열과 같은 데이터를 처리하는데 유용하다.
-value 값으로 문자열, 리스트, set, Sorted set, Hash 등 여러 데이터 형식을 지원.
-따라서 다양한 방식으로 데이터를 활용할 수 있다.
-리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠르다고 한다.
2. 여러 프로세스에서 동시에 같은 Key에 대한 갱신을 요청할 경우,
Atomic 처리로 데이터 부정합 방지 Atomic처리 함수를 제공
3. 메모리를 활용하면서 영속적인 데이터 보존
-명령어로 명시적으로 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다.
-스냅샷(기억장치) 기능을 제공하여 메모리의 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.
4. Redis Server는 1개의 싱글쓰레드로 수행되며, 따라서 서버 하나에 여러개의 서버를 띄우는 것이 가능하다.
-Master - Slace 형식으로 구성이 가능함
-데이터 분실 위험을 없애주는 것이 바로 위 Master - Slave 방식이다.
위 기능을 이용하면 실시간 데이터를 다른 서버에 복제한다.
즉,Master Server가 down되어도 , Slave server로 접속하면 바로 서비스를 계속할 수 있다.
그리고 Redis의 성능을 거의 떨어뜨리지 않고 디스크 쓰기 기능을 제공한다.
Redis 시작시 이 데이터를 읽어 들어오므로 데이터 분실 위험은 거의 없다고 봐도 된다.
5. Redis 에는 5가지의 데이터 형을 사용할수 있다.
-String
-Lists
-Sets
-Sorted Sets
-Hashs
Spring Boot 에서 Redis 사용하기
데이터 모델
NoSQL이 가지고 있는 대표적인 데이터 모델은 아래와 같습니다.
* Key-Value
* 하나의 Key에 하나의 Value를 갖는 데이터 모델
* Key로만 접근 가능
* Column
* 하나의 Key에 여러개의 Value를 갖을 수 있는 데이터 모델
* 중첩된 HashMap 구조
* Document
* Value가 Json이나 XML Document를 갖는 데이터 모델
* Value의 일부로 질의하고 일부만 가져올 수 있음
* Graph
* 관계에 특화된 모델
* 노드와 간선에 대한 정보
Spring-boot-starter-data-redis
Spring Boot에서 제공하는 Starter로 Redis 를 사용함에 필요한 Dependency 와 Configuration을 제공합니다.
Dependency
*Spring-data-redis : 스프링에서 공식 지원하는 Dependency로 Redis Client와 연동 가능한 높은 레벨의 RedisTemplate 추상화를 제공합니다.
*jedis : 가장 많이 사용되고 있는 Java Client로 가장 활발한 오픈소스이며, Redis에서 공식 추천하고 있는 Client중 하나입니다.
Auto Configuration
spring.redis.host = 127.0.0.1
spring.redis.password=
spring.redis.port=6379
* JedisConnectionFactory : Redis 연동
* RedisTemplate : Redis Command 를 도와주는 Template
Operations
Operation은 사용할 데이터 타입에 따라 다르게 사용해야 합니다. Operation들은 @Resources 어노테이션을 통해 선언해 놓은 RedisTemplate로부터 주입 받을 수 있습니다.
String
=일반적인 문자열로 최대 512mbyte 길이 까지 지원한다. Text 문자열 뿐만 아니라 Integer 와 같은 숫자나 JPEG같은 Binary File까지 저장할 수 있다.
ex)
@Resource(name="redisTemplate")
private ValueOperations<String, String> valueOperations;
Set
=Set은 String의 집합니다. 여러개의 값을 하나의 Value 내에 넣을수 있다고 생각하면 되며 블로그 포스트의 태깅등에 사용될 수 있다. 재미있는 점은 Set간의 연산을 지원하는데, 집합인 만큼 교집합,합집합,차이를 매우 빠른 시간내에 추출할수 있다.
ex)
@Resource(name="redisTemplate")
private SetOperations<String, String> setOperations;
Sorted Set
=Set에 "Score" 라는 필드에 추가된 데이터 형으로 Score는 일종의 "가중치" 정도로 생각하면 된다. sorted set에서 데이터는 오름 차순으로 내부 정렬되며, 정렬이 되어 있는 만큼 score 값 범위에 따른 쿼리(range query), top rank에 따른 query등이 가능하다.
ex)
@Resource(name="redisTemplate")
private ZSetOperations<String, String> zSetOperation;
Hashes
=hash는 value내에 field/String value 쌍으로 이루어진 테이블을 저장하는 데이터 구조체이다. RDBMS에서 PK1개와 string 필드 하나로 이루어진 테이블이라고 이해하면 된다.
ex)
@Resource(name="redisTemplate")
private HashOperations<String, String> hashOperations;
List
list는 string들의 집합으로 저장되는 테이터 형태는 set과 유사하지만, 일종의 양방향 Linked List라고 생각하면된다.List앞과 뒤에서 PUSH/POP 연산을 이용해서 데이터를 넣거나 뺄수있고, 지정된 INDEX값을 이용하여 지정된 위치에 데이터를 넣거나 뺄수있다.
ex)
@Resource(name="redisTemplate")
private ListOperations<String, String> listOperations;
'입사후 공부한내용' 카테고리의 다른 글
2017-11-06(Javascript : window.open 속성 사용 방법) (0) | 2017.11.06 |
---|---|
2017-11-03(엑셀 poi read 관련) (0) | 2017.11.03 |
2017-11-03(엑셀 poi write 관련) (0) | 2017.11.03 |
2017-11-03(ACS란 무엇인가) (0) | 2017.11.03 |
2017-11-02(Spring Boot에서 Redis 설정및 사용하여 방문자수 업데이트 만들기) (0) | 2017.11.02 |