그러나 데이터의 확산과 함께 볼륨, Mysql + memcache를 못 만난 대규모 인터넷 애플 리 케이 션의 요구, 많은 조직 Redis 건축 그것의 보충으로 선택,, redis 임계값의 사용은 낮은, SQL, 전체 해 적의 Redis 사용을 공유 하는 모두를 위해 여기를 지원 하지 않는 등.
Redis 가장 밀접 하 게 감시 NoSQL 데이터베이스 중 하나는 Sina Weibo Pinterest, 비아 콤 등 많은 유명 인터넷 기업에 의해 사용 되었습니다. 그러나,에 의해 자연 SQL을 지원 하지 않습니다 하지만 그 접근 하기 매우 어려운 게, @utopiar 보 웬 탐구 Redis를 보면 여기.
탐험 중: Redis? 이게 뭐예요?
즉, Redis는 강력한 키 값 데이터베이스, 강력한 두 개의 점: 빠른 응답 (그래서 데이터 메모리 저장, 필요할 때에 디스크에 기록), 기능-부자 (여러 데이터 형식 및 다양 한 종류에 대 한 복잡 한 작업에 대 한 지원).
사실, Redis의 중요 한 기능이입니다 것은 일반적인 의미에서 데이터베이스 관계형 데이터베이스 같은 모든 SQL 언어를 제공 하지는 않습니다 하지만 그것 저장 하 고 당신을 위해 데이터를 유지할 수 있기 때문에 그것을 데이터베이스 라고 하지만. 하지만 걱정 하지 마세요, Redis 데이터 먹는 블랙홀 아니다, 그리고 그것은 그냥 SQL 및 관련된 기능을 지원 하지 않습니다 하지만 그것은 상호 작용을 위한 강력한 프로토콜을 제공 합니다.
Redis, 데이터 시트, 선택, 조인, 보기, 다른 작업 또는 기능에 대 한 관심 필요가 없습니다의 개념이 없다도 그것은 int 또는 varchar 데이터 필드를 제공지 않습니다. 당신은 상대적으로 기본 데이터 집합 및 데이터 형식을 직면 될 것 이다.
두 번째 탐색: 사용 가능한 데이터 형식
이 이상한 데이터베이스 작동 방법 자세히 봐 보자. 위에서 본, Redis 데이터 저장, 그래서 일단 "키"의 개념에 초점을 키 값 패러다임에 기반.
열쇠는 기본적으로 간단한 문자열, "사용자 이름", "비밀 번호", 등. 공간을 사용할 뿐만 아니라 키의 정의에 사용할 수 있습니다 임의로 일반 문자, 숫자, 등, 등 ".",":", "_" 등에서 키의 정의 사용할 수 있습니다 일반적으로, 이렇게 "user_name", "사용자: 123:age", "사용자: 123:username "좋은 키의 정의 이다.
RDBMS에서 필드의 이름을 달리 여기 키 이므로 Redis의 중요 한 부분이 우리 키와 더 조심 해야. 다음과 같은 내레이션에서 Redis 없으므로 테이블의 개념 처럼 보이는 "사용자에서 사용자를 선택 어디 user_id = 123;" 이 간단한 작업만 Redis에서이 목표를 달성 하기 위해 다른 방법으로 구현할 수 있습니다, 그리고 방법 결과 값을 가져올 키 "사용자: 123:username"를 통해서이다. 당신이 볼 수 있듯이, 키의 정의 (사용자 Id) 같은 신비한 정보를 포함 합니다. Redis에서 키의 중요성을 볼 수 있습니다. (같은 다른 키 값 데이터베이스에서 키에 대 한 사실입니다.) )
이제는 키의 명확한 아이디어를가지고 사용 가능한 데이터 형식의 마법의 세계에 당신을 가자.
문자열
문자열은 Redis에서 가장 기본적인 데이터 형식 이며 1 Gb의 최대 데이터 길이 지 원하는 일반 이진 보안 문자열입니다.
SET 명령을 사용 하 여 문자열 데이터는 키를 설정할 수 있으며 키에 따라 GET 명령에서 결과 얻을 수 있습니다. 카운터, 같은 디지털 정보를 저장 하려는 경우 당신은 또한 문자열 데이터에서 그것을 저장 하 고 INCR과 DECR를 사용 하 여 자동 증가 및 감소 작업을 할 수 있습니다.
목록
목록은 문자열 데이터 항목 삽입 된 순서에 따라 배열 된다의 모음입니다. 당신이 걸릴 수 있습니다 목록 체인 (체인)로 새로운 링크 (링크)를 추가할 수 있습니다 왼쪽 (체인) 또는 오른쪽 (체인 끝), 하지만 당신은 또한 체인 중간에 넣을 수 있지만 매듭을 휴식.
(단 데이터 반환 되 고 요소가 없으면 삭제 됩니다)의 요소는 지정 된 범위를 Lrange 또는 Lpush 및 Rpush 명령을, 그리고 lpop 또는 Rpop 명령 팝업 (동시에 요소 삭제) 요소를 사용 하 여 데이터 목록 (L:left, r: 오른쪽)를 추가할 수 있습니다. 있으 나 추가 요소 LSet, 여 지정된 된 위치에 또한 추가 될 수 있지만 일반적으로이 간단한 lpush 또는 rpush 보다 훨씬 느립니다.
해시
해시는 간결한 방법에 더 밀접 하 게 관련 된 데이터를 저장 합니다. 구현 여러 필드와 각 특성 값 쌍에 해당 하는 데이터 집합 데이터를 저장, 예를 들어 "사용자" 키, 그것의 가치에 대 한 저장 된 각 키에 대 한 내장 된 키-값 쌍 수를 해시 합니다. 루비 또는 자바 같은 프로그래밍 언어에 익숙한 경우 여기 해시 해시 개념 그 언어에서와 유사 하다.
세트
설정 및 "설정", 동일한 이름의 그것의 수학적 개념의 고유 요소 모음입니다. Redis를에서 이러한 개체 문자열 형식 Redis에 된다. 당신이 상상할 수 있는, 세트 다릅니다 목록에서 세트의 요소 정렬 반복 될 수 없습니다, 그리고 세트에 두 개의 동일한 데이터를 넣어 수 없습니다.
사 드, Srem 삭제 데이터를 설정 하거나 반환 Spop 하 여이 데이터를 삭제 하는 데이터를 추가할 수 있습니다. 또한, 화 Sunion를 통해, "설정", "교회법", "차이 세트" 작업의 집합을 구현 하는 Sdiff 명령.
정렬 된 세트
정렬 된 집합은 집합, 정렬된 된 집합의 각 요소는 다른 요소와 비교 하는 데 사용 되는 무게.
물론 주문한 세트는 일반 세트에 유사한 작업, Zadd 및 Zrem는 추가 하 고 요소를 각각 삭제. 세트는 또한 그것의 자신의 고유 작업 있다 주문: ZINCR 및 Zscore, 무게는 요소 + 1 다음 요소의 가중치 값을 반환 하는 데 사용 되는.
세 번째 탐색: 내 테이블 어디?
우리는 전에 사용 하는 SQL 데이터 시트에서 완전히 다르다 Redis를 사용 하 여, 서버에 데이터를 쿼리 하기에 당신을 지원 하기 위해 언어, 데이터베이스에 있는 키를 조작 하는 데 도움이 몇 가지 명령만 있습니다. Redis에 명령은 목록에 SET 명령을 실행할 수 없습니다, 오류 실행의 힌트를 얻을 것 이다 그렇지 않으면 즉 민감한, 데이터 형식이 있습니다. Redis REDIS CLI에서 서버 또는 다른 인터페이스를 사용 하는 프로그래밍 언어에 명령을 보낼 수 있습니다. 다음 예제에서는 우리만 강조 명령 자체, Redis 서버에 제출 하는 방식이 아니라.
사용자 데이터를 보유 하는 일부 응용 프로그램에서는 테이블 같은 간단한 SQL 데이터베이스 테이블을 가정해 보겠습니다.
데이터 저장
만약 우리가 Redis에서 위의 데이터를 저장 하 고 싶 었, 당신은 어떻게 Redis에서 데이터베이스 솔루션 디자인 것? 어쩌면 그것은 더 직관적인 응용 프로그램 비전 측면 에서입니다. Sql, 우리는 사용자 ID, 다른 말로 우리가 해야 할 방법 다른 데이터 엔터티, 그래서 우리는 식별 하 고 고유 id 통해 사용자 정보를 얻을 수를 지정 하 여 선택에서 사용자의 정보를 얻을. 그래서 Redis에서 그리고 우리의 쿼리 요구 해결, 그럼 Redis 키를 사용자 ID 정보를 추가 하면 데이터 다음 형식으로 저장 됩니다.
그래서, 사용자 ID가 되려면, 우리가 주요 사용자: id: 사용자 이름, 사용자: 아이디: 비밀 번호, 사용자: id: 이름, 사용자: id: 성씨의 형태로 사용자 정보를 읽을 수 있습니다.
사용자 로그인
위의 저장 양식을 사용자 로그인에 대 한 또한 사용할 수 있지만 사용자 이름에 기반 하는 사용자의 ID를 쿼리 하는 방법을 합니다. 즉, 우리는 또한 이름과 Id 간의 연결을 설정 해야 합니다. 이 다른 Redis 키 "사용자: username:id"를 추가 하 여 수행할 수 있습니다.
마리오로 시에 로그인 하 고 싶다면, 지금 우리 키 "사용자: user2:id"를 통해 사용자를 찾을 수 있다 고 사용자 로부터 모든 정보를 얻을.
기본 키
Redis에서 ID 값의 고유성을 보장 하는 방법? Sql에서 ID int 기본 키 auto_increment 구현 하기 위해, 자신의 기본 키 정의를 사용 하 여 그리고 지금 우리 각 사용자에 대해 다른 ID를 생성 하는 유사한 방법. Redis에 시나리오는이: 키 "사용자: next_id"를 만들고 그것을 사용 하 여 숫자 데이터를 이전 데이터 형식에 따라 새 사용자를 추가할 때마다 키 "사용자: next_id" INCR 명령을 실행 하는 카운터로.
선택 * 사용자;
다음 도전은 사용자 목록을 쿼리 하는 것입니다. 아마 당신은 우리의 데이터 저장소 사용자 목록 쿼리 정도로 생각: "사용자: next_id" 카운터의 현재 값을 얻을 하 고 다음 하나 이상의 단계에서 사용자의 데이터를 얻을 카운터를 0을 반복 수 있습니다. 하지만 만약 사용자 (삭제는 아래에서 설명) 시스템에서 제거 되 고 모든 Id 카운터를 0에서 순회, 일부 Id 데이터 쿼리하지 않습니다.
이 일반적으로 문제가 되지 않습니다, 하지만 우리 하지 그래서 우리는 또 다른 키 "사용자:", 있는 목록 목록 만들거나 각 새 사용자 ID를 저장 하기 위한 형식을 설정 하 고, 필요한 경우, "사용자:" 목록에서 존재 하지 않는 사용자 데이터에 시간을 낭비 싶지 ID 제거는 난 그것은 Lrange 명령을 통해 페이징 구현할 수 있기 때문에 목록을 사용 하 여 선호 합니다.
사용자 삭제
얼굴을 또 다른 문제 "데이터 무결성" 이며 어떻게 되는지 우리는 사용자를 삭제 합니다. 우리 필요 즉이 사용자에 대 한 각 참조를 삭제 하려면, 다음 모든 키를 삭제 하려면 "사용자: id: *", "사용자: username:id", 및 "사용자: 목록" 사용자 id입니다.
4 탐구: 간단한 사용 사례
실용적인 배우기 위하여 우리가 가상 라이브러리를 디자인 하 고는 책의 주제에 따라 그룹화 할 수 있습니다. 다음 예제는 사용자 테이블 위의 보다 약간 더 복잡 하지만 Redis 협회 관계를 처리 하는 방법을 배웁니다.
응용 프로그램에서 우리는 서를 수집 하 고 그들의 제목, 저자 (들), 주제 (s), 페이지, 가격, ISBN 및 설명을 저장할 필요 합니다. 분명히 일부 책 이상의 저자, 그리고 그것은 다른 주제를 커버 수 있습니다 (예를 들어 책 수 프로그래밍 주제 또는 루비 프로그래밍의 설명). 다른 저자는 많은 책, 작성 할 수 있습니다 그리고 주제 필연적으로 하지 많은 책 들이 포함 됩니다. 당신이 볼 수 있듯이, 저자 및 책, 테마와 책 사이의 다 대 다 관계가 있다.
SQL 시나리오
첫째, 우리는 SQL 데이터 시트를 사용 하 여 우리가 Redis 영역에 더 직관적으로 시뮬레이션할 수 있도록이 시나리오에 대 한 데이터 모델을 구축 하려고:
Redis 장면
우리는 이미 세 테이블 책, 저자 및 주제를 이해 하는 문제가 되지 않습니다 그래서 Redis에 데이터를 저장 하는 방법을 커버 했습니다. 하지만 다를 직면 했을 때 책 저자와 책 주제 테이블 사이 협회, 문제가 복잡해 집니다. 도 서 및 주제 사이의 관계를 해결 하는 방법을 볼 수 예를 들어 주제, 책과 저자 사이의 관계는 관계 되 면 분명, 해결 될 것 이다.
각도 서에 대 한 우리가 그것에 속한다, 또한 포함 된 각도 서를 처리 하는 데 각 항목에 대 한 어떤 주제를 알아야 합니다. 즉, 각도 서에 대 한 그것과 관련 된 항목을 저장 하는 Id의 목록이 필요 하 고 각 항목에 대 한 해야 관련 된 책을 저장 하는 Id의 목록 키를 누릅니다. 이것은 설정 하 고입니다. 우리 두 세트를 만들 것입니다: "책: id: 주제"와 "항목: id: 책", 책의 주제 ID 목록, 주제도 서 ID 목록을 저장을 보유 하 고 있는. 예를 들어 이전 SQL 시나리오에서 데이터를 받아, 책 "Erlang 프로그래밍"도 서 테이블에서 (ID 2)는 "책: 2:topics"의 키, 값 형식 설정 되어 있고 데이터는 (1, 3) 데이터 정보; 프로그래밍 "있을 것입니다의 키를 사용 하 여 dataset" 항목: 1:books "그리고 값 (1, 2).
분석 후, 우리는 Redis 장면의 데이터 모델을 얻을:
당신이 볼 수 있듯이 sql에서 다 협회 Redis 두 세트와 함께 구현할 수 있습니다. 이 매우 유용 하 게 찾을 거 야 그리고 그것은 우리에 게 자유롭게 다른 정보에 액세스 하는 기능을 제공: 관심의 모든 "항목: id: 책" 컬렉션의 교차점에 협력 하 여 여러 항목에 속하는 서를 얻을 수 있습니다. 예를 들어, 설정된 "항목: 1:books" (테마 프로그래밍)와 "항목: 2:books" (루비 테마)의 교차로 컬렉션 Id를 하나의 요소 (1) 귀 착될 것 이다 = 1 책: 프로그래밍 루비.
이 구현에 대 한 데이터의 삭제에 특별 한 관심을 지불 해야 합니다. 때문에 주제에 책에 대 한 참조 그리고 책에 있는 주제에 대 한 참조는, 어떻게 삭제가 이루어집니다? 예를 들어도 서에서 데이터를 삭제 하려면 첫 번째 생각은 각 키를 삭제 하는 "도 서: id: *"를 이렇게 전에 모든 키 "항목: id: 책" 컬렉션에 항목을 통과 하 여 책의 ID 삭제, 제거 해야 하지만 데이터 그리고, 물론, 키가 "책: 목록"도 서 목록에서이 ID를 제거. 작업은 비슷한 주제를 제거 하려는 경우: 모든 키를 제거 하기 전에 키 "도 서: id: 주제"와 함께 서에 설정 하는 항목 ID를 통과 해야 "항목: id: *" 주제에서 메시지. 그리고 삭제, 주제에서 ID를 제거 하 고 항목: 목록 목록에서 ID를 제거 합니다. 동일한 작업 작가에 적용 됩니다.
5 탐구: 고향
Redis의 탐사는 통로에, 지금은 다시 볼 우리가 우리의 가방에 수확가지고 무슨 대단한 일 들을 보고.
우리 데이터 형식과 Redis에 작업 명령의 배운 몇 가지 다른 흥미로운 것 들이 있다. 몇 가지 기억에 남는 이야기는:
문자열 데이터에 INCR 명령을 실행 하 여 고유한 자체 추가 기본 키 문제 해결
풍부한 키 사용자 로그인 시나리오를 처리: "사용자: username:id"
데이터 집합된 구현을 통해 사이 다 Many에 다 협회
지금까지, Redis 여행입니다, 그리고 불행 가져 하지는 희망. 마지막으로 좋은 지의 쌍을 전송: 재미 무료 소프트웨어 코딩!
원본 링크: http://www.cnblogs.com/enjiex/p/3618546.html