카테고리 없음

Redis

Redis

 

Redis 는 현재 인터넷 세계에서 가장 유행하는 NoSQL(Not Only SQL) 데이터베이스입니다.NoSQL은 인터넷 시스템에서의 역할이 크다.

Redis는 일정한 지속적 계층의 기능을 갖추고 있으며 일종의 완급 도구로 활용할 수도 있습니다.NoSQL 데이터베이스의 경우, 그것의 지속 계층으로서 저장되는 데이터는 반구조화되어 있는데, 이것은 컴퓨터가 읽기 메모리에 더 적은 규칙이 있고 읽기를 의미한다.속도가 더 빠르다.

구조화되고 다범한 규칙을 가진 그러한 데이터베이스 시스템들에게는 훨씬 더 성능적인 이점이 있다.완존으로서, 그것은 빅 데이터가 메모리에 저장되고 적중률이 높으면 빠르게 응답할 수 있도록 지원할 수 있는데, 이는 메모리에서의 데이터 읽기/쓰기 비데이터베이스 읽기/쓰기 디스크이기 때문입니다.속도가 수십에서 백 배 더 빠르며, 그 작용은 그림 1에 표시되어 있습니다.

NoSQL의 역할
그림 1 NoSQL 의 역할

현재 NoSQL에는 데이터베이스를 대체할 수 있다고 생각하는 사람들이 있는데 필자는 그렇지 않다.

데이터베이스 시스템은 더 나은 규범성과 데이터 무결성이 있고, 기능이 더 강력하며, 지구 계층으로서 더 완벽하고, 안전성이 더 높기 때문입니다.NoSQL은 구조가 느슨하고 불완전하며 기능이 한정되어 있어, 현재로서는 데이터베이스를 대체할 실력은 없지만, 완만한 것으로 한다.도구, 그것의 고성능, 높은 응답과 같은 기능을 저장하여 매우 중요한 도구가 되도록 한다.

현재 Redis가 주요 NoSQL 툴이 되었지만 그 이유는 다음과 같습니다.
1) 호응이 빠르다
Redis 응답은 매우 빨라서 초당 약 1100,000개의 쓰기 작업, 또는 810,000개의 읽기 작업을 수행할 수 있으며 데이터베이스를 훨씬 능가합니다.자주 사용하는 데이터를 넣어 두면 시스템의 성능을 효율적으로 향상시킬 수 있다.
2) 6가지 데이터 유형 지원
그것들은 문자열, 해시 구조, 리스트, 집합, 정렬 집합 및 기수입니다.예를 들어 문자열에 대해 약간의 Java 기반 데이터 유형을 저장할 수 있으며, 해시는 대상을 저장할 수 있으며 리스트는 List 대상을 저장할 수 있습니다.이것은 애플리케이션에서 매우자신의 필요에 따라 저장된 데이터 유형을 쉽게 선택하여 개발이 간편해집니다.

Redis의 경우 6가지 데이터 유형에 불과하지만, 여러 데이터 구조체를 저장하는 수요를 충족시킬 수 있는 한편, 데이터 유형이 적으면 규칙이 적고 필요한 판단과 논리가 적은 이점이 있습니다./쓰는 속도가 더 빠릅니다.
3) 조작은 모두 원자의
모든 Redis 의 조작은 원자적으로 이루어지며, 따라서 두 클라이언트가 Redis 서버를 동시에 방문할 때 얻을 수 있는 것은 업데이트된 값(최신값)입니다.높은 합병증이 필요한 장소에서 Redis 를 사용하는 사무,처를 고려할 수 있다.자물쇠가 필요한 업무를 정리하다.
4) MultiUtility 툴
Redis는 아카이브, 메시지 전달 대기열에서 사용(Redis에서 "+ 구독 배포" 메시지 모드 지원), 웹 응용 프로그램의 경우 웹 응용 프로그램 세션, 웹 페이지 조회 수 등과 같은 어떤 짧은 데이터에도 액세스할 수 있습니다.

바로 Redis가 이러한 장점들을 갖추고 현재 주류를 이루고 있는 NoSQL 기술이 Java 네트워크에서 널리 사용되고 있기 때문입니다.

한편, NoSQL을 사용하여 데이터베이스로부터 데이터를 읽어들이고 아카이브하면, 데이터베이스처럼 디스크를 읽지 않고 메모리에서 데이터를 읽을 수 있다.현실은 읽기 조작이 쓰기 조작보다 훨씬 더 많기 때문에, 자주 사용하는 많은 데이터를 천천히 저장하여 그 적중을 향상시킨다.확률은 전반적인 성능 향상에 도움이 되고 데이터베이스의 스트레스를 완화하므로 인터넷 시스템 아키텍처에 매우 유리합니다.

한편, 인터넷이 고도로 데이터를 병합해 처리해야 하는 경우, 예를 들어 촌지 가로채기, 상품 초살 등의 장면도 충족할 수 있으며, 이러한 경우에는 고속으로 처리하고 데이터의 보안과 일치성을 병발해야 합니다.

 

 

일반적으로 Redis는 Java Web 애플리케이션에서 자주 사용되는 데이터를 완만하게 보관하고, 다른 하나는 고속 읽기/쓰기가 필요한 장소에서 빠른 읽기/쓰기를 사용하며, 예를 들어 상품 사재기와 촌지를 필요로 하는 두 가지 주요 장면이 있습니다.

높은 병렬 상황에서 데이터에 대한 고속 읽기/쓰기가 필요한 장면 때문에, 한 가지 가장 핵심적인 문제는 데이터 일치성과 접근 제어입니다.
예금을 보류하다
데이터베이스에 대한 읽기/쓰기 조작에서 현실적인 경우 읽기 조작 횟수가 쓰기 조작을 훨씬 능가하며, 일반적으로 1:9에서 3:7의 비율이기 때문에 쓰기보다 읽기가 필요할 가능성이 훨씬 더 많습니다.

SQL을 데이터베이스로 보내어 읽을 때 데이터베이스는 디스크로 가서 대응하는 데이터를 색인화하고, 인덱스 디스크는 상대적으로 느린 과정이다.데이터를 메모리에 실행 중인 Redis 서버에 직접 두면 읽기/쓰기가 필요하지 않음디스크가 아니라 메모리를 직접 읽으면 분명히 속도가 훨씬 빨라지고 데이터베이스의 스트레스를 크게 줄일 수 있습니다.

메모리를 사용하여 데이터를 캐싱하는 것도 비교적 큰데, 디스크는 TGB 클래스일 수 있고 매우 저렴하며 메모리는 보통 몇 백 개의 GB이면 상당히 대단하기 때문에 메모리는 효율적이지만 공간은 제한되어 있고 가격도 한정되어 있기 때문입니다.존속 대가가 높은 것은, 원하는 만큼 저축하는 것이 아니기 때문에, 우리는 조건부 저장 데이터를 고려해야 한다.

일반적으로는 사용자가 로그인한 정보, 일부 주요 업무 정보, 예를 들어 은행이 고객 기반 정보, 은행 카드 정보, 최근 거래 정보 등을 저장합니다.일반적으로 Redis 스토리지를 사용할 때 3부터 여러 방면으로 고려하다.
업무 데이터가 자주 사용됩니까?적중률은 어때? 명중률이 매우 낮으면 완만하게 쓸 필요가 없어.
이 업무 데이터는 읽기 조작이 많은지 쓰기 조작이 많은지, 쓰기 조작이 많은지, 쓰기 조작이 많으면 빈번하게 데이터베이스에 쓸 필요가 있는지, 아니면 쓰기 완치가 필요하지도 않습니다.
업무 데이터 크기는 어떻습니까?몇 백메가바이트의 파일을 저장하려고 하면, 재고를 완만하게 하는 데 큰 스트레스를 줄 수 있는데, 그럴 필요가 있을까요?

이러한 문제를 검토한 후, 완존을 사용할 필요가 있다고 생각되면 그것을 사용한다.Redis를 사용하여 느린 판독 논리는 그림 1에 나와 있습니다.

리디스의 완존 애플리케이션
그림 1 Redis의 완존 애플리케이션

그림 1에서 다음 두 가지 점을 알 수 있습니다.
데이터를 처음 읽을 때 Redis 의 데이터를 읽는 것은 실패하며, 이 경우 프로그램의 판독 데이터베이스를 촉발하여 데이터를 판독하고 Redis 에 기입한다.
두 번째 및 이후에 데이터를 읽을 때 바로 Redis를 읽고 데이터를 읽은 후 프로세스를 종료하면 속도가 크게 향상됩니다.

위의 분석에서 알 수 있듯이, 대부분의 조작은 읽기 조작이며, Redis 를 사용하여 읽기 조작에 대응하면 속도가 매우 빨라지는 동시에 데이터베이스에 대한 의존도를 낮추어 데이터베이스의 부담을 크게 줄였습니다.

읽기 조작의 논리를 분석한 후, 다음에서 다시 와서 조작을 쓰고 있는 프로세스를 그림 2에 나타낸 것과 같이 분석합니다.

조작의 흐름을 쓰다
그림 2 조작의 흐름 작성

프로세스에서 알 수 있듯이, 갱신 또는 적는 조작은 복수의 Redis 의 조작이 필요하다.업무 데이터 쓰기 횟수가 읽기 횟수보다 훨씬 크면 Redis를 사용할 필요가 없습니다.쓰는 횟수보다 읽는 횟수가 훨씬 많다면 Redis 를 사용하면 그만한 가치가 있습니다,Redis에 쓰기 때문에 일정한 대가를 소모해야 하지만 성능이 양호하며, 상대적 데이터베이스의 경우 거의 무시해도 됩니다.
고속 읽기/쓰기 장
인터넷의 응용에는, 상품의 초살, 돈봉투 뺏기, 타오바오, 징동의 쌍십일 행사나 춘운탈표와 같은 고속 읽기/쓰기가 필요한 경우가 많다.

이와 같은 경우 한 순간 수천 명의 요청이 서버에 도달하고 데이터베이스를 사용할 경우 한 순간 데이터베이스가 수천 개의 SQL을 실행해야 하며, 데이터베이스의 병목을 초래하기 쉬우며, 심각한 데이터베이스 다운을 초래하여 Java W.eb 시스템 서비스가 붕괴되었습니다.

이러한 경우에 대응하는 방법은 종종 비동기적 데이터베이스 쓰기를 고려하고 고속 읽기/쓰기의 경우에만 Redis를 사용하여 대응해야 하며, 고속 읽기/쓰기가 필요한 데이터를 Redis에 천천히 저장하여 일정한 조건을 충족해야 한다.보류 중인 데이터를 데이터베이스에 작성합니다.먼저 그림 3에 표시된 것처럼 조작 요청을 한 번 하는 흐름도를 봅니다.

Redis의 고속 읽기/쓰기 장에서의 애플리케이션
그림 3 Redis 고속 읽기/쓰기에서의 애플리케이션

이 과정을 한층 더 논술하다:

하나의 요청이 서버에 도달했을 때, 단지 업무 데이터를 Redis에 읽기/쓰기만 하고 데이터베이스에 대한 어떤 조작도 하지 않았을 때, 바꾸어 말하면 시스템은 단지 Redis 완만하고 데이터베이스를 많이 조작하지 않았을 뿐이고, 이 속도는 조작된 데이터베이스보다 훨씬 더 빠르다.고속 응답을 요하는 효과를 낸다.

그러나 일반적으로 아카이브가 오래 지속되지 않거나, 오래된 데이터가 잘 정의되지 않아 이러한 데이터를 데이터베이스에 저장해야 하므로, 하나의 요청에서 Redis 읽기/쓰기가 완료된 후 해당 고속 읽기/쓰기 작업이 완료되었는지 여부를 판단합니다.

이 판단 조건은 흔히 초살상품 잔여 개수가 0이고 촌지 금액이 0인 경우, 성립되지 않으면 데이터베이스를 조작하지 않으며, 성립될 경우, 촉발사건은 Redis의 완존된 데이터를 로딩으로 일괄 작성한다.화한 작업.

가령 상품 초살의 경우, 위의 흐름으로 볼 때, 한 사용자가 상품을 사재기하는 경우는 대부분 디스크 데이터베이스가 아닌 메모리 데이터베이스 리디스를 조작하는 경우가 많기 때문에 성능이 더욱 우수합니다.상품이 매진된 후에야 촉발된다시스템은 Redis의 완만한 데이터를 데이터베이스 디스크에 기록하는데, 이렇게 하면 시스템의 대부분의 조작이 메모리에 기반하여 초살의 자리에서 고속이 됩니다.사용자의 요청에 응답하여 빠른 응답에 도달합니다.

고도의 응답을 필요로 하는 현실의 이러한 시스템은 위의 분석보다 훨씬 더 복잡할 수 있는데, 여기서는 높은 병합에서 발생하는 데이터 보안과 일치성 문제가 논의되지 않고, 유효한 청구와 무효 청구, 사무 일치성 등 많은 문제가 논의되지 않기 때문입니다.