Redis는 데이터를 유지합니까?


122

Redis는 메모리의 모든 데이터를 제공하지만 서버 재부팅시에도 유지되므로 서버가 재부팅 될 때 디스크의 모든 데이터를 메모리로 읽어들입니다. 아니면 앱이 지속성없이 실행되는 동안에 만 데이터를 저장하는 빈 저장소입니까?


1
질문을 올바르게 이해했는지 잘 모르겠습니다. 스냅 샷을 디스크에 저장하고 해당 파일에서 읽을 수 있습니다. 그렇지 않으면 재부팅 할 때 redis 데이터베이스가 비어있게됩니다.
Sefa 2014-08-15

답변:


82

http://redis.io/topics/persistence에서 이에 대해 읽어 보시기 바랍니다 . 기본적으로 메모리 내 저장 만 사용하여 성능을 높이면 보장 된 지속성이 손실됩니다. 메모리에 삽입했지만 디스크에 유지되기 전에 전원이 꺼지는 시나리오를 상상해보십시오. 데이터가 손실됩니다.

Redis는 소위 "스냅 샷"을 지원합니다. 즉, 특정 시점 (예 : 1 시간마다)에 메모리에있는 내용의 전체 복사를 수행합니다. 두 스냅 샷 사이의 전원이 끊기면 마지막 스냅 샷과 충돌 사이의 데이터가 손실됩니다 (정전이 아니어도됩니다.). Redis는 대부분의 NoSQL-DB와 마찬가지로 데이터 안전성과 성능을 비교합니다.

대부분의 NoSQL 데이터베이스는 이러한 위험을 최소화하기 위해 여러 노드 간의 복제 개념을 따릅니다. Redis는 데이터 일관성을 보장하는 데이터베이스 대신 더 빠른 캐시로 간주됩니다. 따라서 그 사용 사례는 일반적으로 실제 데이터베이스의 사용 사례와 다릅니다. 예를 들어 세션, 성능 카운터 또는 그 안에 타의 추종을 불허하는 성능과 충돌시 실제 손실이없는 모든 것을 저장할 수 있습니다. 그러나 주문 / 구매 내역 등을 처리하는 것은 기존 데이터베이스의 작업으로 간주됩니다.


1
기본 지속성 동작을 추가 할 수 있다면 좋을 것입니다. @Leonid Beschastny 답변처럼.
yeya

40

Redis 서버는 모든 데이터를 때때로 HDD에 저장하므로 일정 수준의 지속성을 제공합니다.

다음과 같은 경우에 데이터를 저장합니다.

  • 때때로 자동으로
  • 수동으로 명령을 호출 할 때BGSAVE
  • redis가 종료 될 때

그러나 redis의 데이터는 다음과 같은 이유로 실제로 영구적이지 않습니다.

  • redis 프로세스가 중단되면 마지막 저장 이후 모든 변경 사항이 손실됩니다.
  • BGSAVE 충분한 여유 RAM이있는 경우에만 작업을 수행 할 수 있습니다 (추가 RAM의 양은 redis DB의 크기와 동일).

NB : BGSAVE RAM 요구 사항은 실제 문제입니다. redis는 더 이상 실행할 RAM이 없을 때까지 계속 작동하지만 훨씬 일찍 (RAM의 약 50 %에서) HDD에 데이터 저장을 중지하기 때문입니다.

자세한 내용은 Redis Persistence를 참조하십시오 .


1
이 답변이 작성되었으므로 redis는 훨씬 더 높은 지속성을 제공하지만 더 높은 디스크 사용률 및 느린 서버 시작과 같은 다른 단점이있는 AOF라는 대체 지속성 모델을 도입했습니다.
Leonid Beschastny

15

구성의 문제입니다. Redis에서 데이터를 전혀 또는 부분적으로 또는 전체적으로 유지할 수 있습니다. 최상의 결정은 프로젝트의 기술 및 비즈니스 요구에 따라 결정됩니다.

지속성에 대한 Redis 문서에 따르면 인스턴스를 설정하여 때때로 데이터를 디스크에 저장하거나 각 쿼리에 대해 간단히 말해 볼 수 있습니다. 그들은 두 가지 전략 / 방법 AOF와 RDB를 제공합니다 (그때에 대한 세부 사항을 보려면 문서를 읽으십시오), 각각을 단독으로 또는 함께 사용할 수 있습니다.

"지속성과 같은 SQL"을 원한다면 다음과 같이 말했습니다.

일반적인 징후는 PostgreSQL이 제공 할 수있는 것과 비슷한 수준의 데이터 안전성을 원한다면 두 가지 지속성 방법을 모두 사용해야한다는 것입니다.


7

대답은 일반적으로 yes입니다 . 그러나 더 완전한 대답은 실제로 저장하려는 데이터 유형에 따라 다릅니다. 일반적으로 더 완전한 짧은 대답은 다음과 같습니다.

  • Redis는 주로 성능에 중점을두기 때문에 영구 스토리지에 가장 적합하지 않습니다.
  • Redis는 현재 상태 데이터 의 안정적인 인 메모리 스토리지 / 캐싱 , 특히 여러 클라이언트 / 서버에서 사용되는 데이터에 대한 중앙 소스를 제공하여 확장 성을 허용하는 데 더 적합 합니다.

이렇게 말하면 기본적으로 Redis 주기적인 간격으로 데이터 스냅 샷 을 유지 합니다 (분명히 1 분마다이지만 확인하지 않았습니다. 아래 기사에서 설명하는 좋은 기본 소개입니다).

http://qnimate.com/redis-permanent-storage/


TL; DR

로부터 공식 문서 :

  • RDB 지속성 [기본값] 은 지정된 간격으로 데이터 세트의 특정 시점 스냅 샷을 수행합니다.
  • AOF 지속성 [명시 적으로 구성해야 함] 은 서버에서 수신 한 모든 쓰기 작업을 기록하며, 서버 시작시 다시 재생되어 원래 데이터 세트를 재구성합니다.

Redis는 AOF 지속성을 위해 명시 적으로 구성 되어야하며 , 이것이 필요한 경우 성능 저하와 로그 증가가 발생합니다. 제한된 양의 데이터 흐름을 비교적 안정적으로 유지하는 데 충분할 수 있습니다.


5

지속성 없음을 선택할 수 있습니다. 성능은 향상되지만 Redis가 종료되면 모든 데이터가 손실됩니다.

Redis에는 RDB와 AOF의 두 가지 지속성 메커니즘이 있습니다. RDB는 스케줄러 전역 스냅 샷을 사용하고 AOF는 MySql과 유사한 apappend 전용 로그 파일에 업데이트를 기록합니다.

둘 중 하나 또는 둘 다 사용할 수 있습니다. Redis가 재부팅되면 RDB 파일 또는 AOF 파일을 읽어 데이터를 구성합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.