2016년 5월 10일 화요일

Redis에 대해 현재 개발에 필요한 내역 요약(Java)

Redis


Redis는 메모리 기반의 Key/Value Store 이다.

기존에 메모리 기반 NoSQL DB 인 MemCached 와 성능면에서 비등하면서

Data Structure 도 지원됨으로서 다양한 용도로 사용할 수가 있다.

( Ex) Messsage Queue , Shared Memory Server , Remote Dictionary , Pub/Sub 등.

여기서는 각각에 사용되는 모델 설명하고

현재 서버를 자바로 개발하고 있으므로 Java Client 중에 추천할만한 것을 소개하도록 한다.

1. Persistence

    Redis 는 Memory 형 DB 이기 때문에 서버가 죽으면 데이터가 유실될 우려가 있겠지만, Redis는 Restart 될 때,

    Disk 에 저장해 놓은 데이터를 다시 읽어서 메모리에 로딩하기 때문에 데이터가 유실되지 않는다.

    Disk 에 데이터를 저장하는 방법은 2가지 인데, 스냅샷 방식과 AOF 2가지가 있다.

    스냅샷 방식을 RDB 방식과 같다.

    AOF는 Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 방식이다.

    서버가 재시작 될 때 순차적으로 재 실행하여 데이터를 복구한다.

    장점이라면, 당연히 어느 시점에 서버가 다운되더라도 데이터 유실이 발생되지 않는다. 다만 단점은, 복구시 서버 리스타트 속도가 무지막지 하게 느리며 파일이 너무 커진다.

    AOF 와 스냅샷 방식에 자세한 내용은 이 문서를 참고해주기 바란다.
    http://www.redisgate.com/redis/configuration/persistence.php

 

2. Pub/Sub Model


    Redis는 Pub/Sub 모델에서도 활용될 수 있다. 하나의 Redis Client 가 메시지를 Publish 하면 Topic에 연결되어 있는 다른 Redis Client 가 메시지를 받을 수 있는 구조다.

  좀 특이한 점은 pattern matching 을 통해서 다수의 Topic에서 Message를 subcribe 할 수 있다.



3. Redis 에서 지원되는 자료구조

   1). String

       문자열만 저장할 수 있는 것이 아니고, 이진 데이터도 저장이 가능하다.

       key 에 넣을 수 있는 Data 최대 크기는 512MB 다.



   2). List

       Lists (Array 형태로 Key 1개에 n개의 값을 가짐, 중복 값 가능)

       - 배열이라고 생각하면 된다.

       - 한 key에 넣을 수 있는 요소의 최대 개수는 4,294,967,295 개이다.

   3). Set

       - 정렬되지 않은 집합 형으로 key에 중복된 데이터는 종재하지 않는다.

       - 추가 , 제거 및 존재 체크 시 소모되는 시간이 , sets에 포함된 요소의 수에 관계없이 일정하다.

       - 한 key에 넣을 수 있는 요소의 최대 개수는 4,294,967,295 개이다.

   4). Sorted-Set

       - Sorted-Set 은 Redis 에서 가장 많이 쓰이고, 가장 진보된 데이터 형이라고 한다.

       - 랭킹시스템 등에서 사용되기 좋다.

       - sets의 각 요소마다 score라는 실수 값을 가지고 있는 형태로 score 값으로 오름차순 정렬된다.

       - key에 중복된 데이터는 존재하지 않지만 score 값은 중복 가능하다.

   5). Hashes

       - lists와 비슷하지만, '필드명'/ '필드값' 의 연속으로 이루어져 있다.

       - 한 key에 포함될 수 있는 field-value 쌍의 최대 개수는 4,294,967,295 개이다.



4. Redis Client

    1) Java

        Java Client 는 여러가지 종류가 있다. http://redis.io/clients#java

        그 중에 6개월 내에 커밋이 일어나고 있는 것은 Jedis / JRedis / lettuce / RedisClient / Redisson 이렇게 5가지 이며,

        그 중에 Redis 에서 추천하고 있는 Client 는 Jedis / lettuce / Redisson 이렇게 3가지 이다.

        이 중에 추천하고 싶은 Client 는 Jedis 인데 이유는 다음과 같다.

        a) 가장 많은 Contributor 를 보유하고 있는 오픈소스 프로젝트이며 가장 오래된 클라이언트이다.

           - 컨트리뷰터 수가 다른 프로젝트와 많은 차이가 날 만큼 많다.

            Jedis : 108 / lettuce : 12 / redisson : 26

            또한 국내에서 Redis 로 유명하고 책도 많이 쓰신 카카오 강대명씨가 커미터로 활동하고 계신 프로젝트가 바로 Jedis 다.



        b) jedis는 이슈와 피드백이 많다.

           다른 클라이언트에 비해서 Jedis는 사용자가 많고, 커밋 시점이 오래되었고 지금도 활발한 편이여서 이슈나 피드백이 많다.

           따라서, 예제소스 찾기가 쉬우며 그만큼 레퍼런스가 많은 편이다.



       c) Jedis는 사용이 간편하다.

          처음 접근하기에 사용이 간편하고 버그에 대한 피드백도 빠른편, 그리고 여러가지 기능을 붙이지 않는 것도 장점이다.



      jedis Github : https://github.com/xetorthio/jedis

참고자료

http://www.redis.io/documentation

http://mydb.tistory.com/210

http://www.joinc.co.kr/w/man/12/REDIS/IntroDataType

댓글 없음:

댓글 쓰기