답변:
http://redis.io/topics/persistence에서 이에 대해 읽어 보시기 바랍니다 . 기본적으로 메모리 내 저장 만 사용하여 성능을 높이면 보장 된 지속성이 손실됩니다. 메모리에 삽입했지만 디스크에 유지되기 전에 전원이 꺼지는 시나리오를 상상해보십시오. 데이터가 손실됩니다.
Redis는 소위 "스냅 샷"을 지원합니다. 즉, 특정 시점 (예 : 1 시간마다)에 메모리에있는 내용의 전체 복사를 수행합니다. 두 스냅 샷 사이의 전원이 끊기면 마지막 스냅 샷과 충돌 사이의 데이터가 손실됩니다 (정전이 아니어도됩니다.). Redis는 대부분의 NoSQL-DB와 마찬가지로 데이터 안전성과 성능을 비교합니다.
대부분의 NoSQL 데이터베이스는 이러한 위험을 최소화하기 위해 여러 노드 간의 복제 개념을 따릅니다. Redis는 데이터 일관성을 보장하는 데이터베이스 대신 더 빠른 캐시로 간주됩니다. 따라서 그 사용 사례는 일반적으로 실제 데이터베이스의 사용 사례와 다릅니다. 예를 들어 세션, 성능 카운터 또는 그 안에 타의 추종을 불허하는 성능과 충돌시 실제 손실이없는 모든 것을 저장할 수 있습니다. 그러나 주문 / 구매 내역 등을 처리하는 것은 기존 데이터베이스의 작업으로 간주됩니다.
Redis 서버는 모든 데이터를 때때로 HDD에 저장하므로 일정 수준의 지속성을 제공합니다.
다음과 같은 경우에 데이터를 저장합니다.
그러나 redis의 데이터는 다음과 같은 이유로 실제로 영구적이지 않습니다.
BGSAVE
충분한 여유 RAM이있는 경우에만 작업을 수행 할 수 있습니다 (추가 RAM의 양은 redis DB의 크기와 동일).NB : BGSAVE
RAM 요구 사항은 실제 문제입니다. redis는 더 이상 실행할 RAM이 없을 때까지 계속 작동하지만 훨씬 일찍 (RAM의 약 50 %에서) HDD에 데이터 저장을 중지하기 때문입니다.
자세한 내용은 Redis Persistence를 참조하십시오 .
구성의 문제입니다. Redis에서 데이터를 전혀 또는 부분적으로 또는 전체적으로 유지할 수 있습니다. 최상의 결정은 프로젝트의 기술 및 비즈니스 요구에 따라 결정됩니다.
지속성에 대한 Redis 문서에 따르면 인스턴스를 설정하여 때때로 데이터를 디스크에 저장하거나 각 쿼리에 대해 간단히 말해 볼 수 있습니다. 그들은 두 가지 전략 / 방법 AOF와 RDB를 제공합니다 (그때에 대한 세부 사항을 보려면 문서를 읽으십시오), 각각을 단독으로 또는 함께 사용할 수 있습니다.
"지속성과 같은 SQL"을 원한다면 다음과 같이 말했습니다.
일반적인 징후는 PostgreSQL이 제공 할 수있는 것과 비슷한 수준의 데이터 안전성을 원한다면 두 가지 지속성 방법을 모두 사용해야한다는 것입니다.
대답은 일반적으로 yes입니다 . 그러나 더 완전한 대답은 실제로 저장하려는 데이터 유형에 따라 다릅니다. 일반적으로 더 완전한 짧은 대답은 다음과 같습니다.
이렇게 말하면 기본적으로 Redis 는 주기적인 간격으로 데이터 스냅 샷 을 유지 합니다 (분명히 1 분마다이지만 확인하지 않았습니다. 아래 기사에서 설명하는 좋은 기본 소개입니다).
http://qnimate.com/redis-permanent-storage/
TL; DR
로부터 공식 문서 :
- RDB 지속성 [기본값] 은 지정된 간격으로 데이터 세트의 특정 시점 스냅 샷을 수행합니다.
- AOF 지속성 [명시 적으로 구성해야 함] 은 서버에서 수신 한 모든 쓰기 작업을 기록하며, 서버 시작시 다시 재생되어 원래 데이터 세트를 재구성합니다.
Redis는 AOF 지속성을 위해 명시 적으로 구성 되어야하며 , 이것이 필요한 경우 성능 저하와 로그 증가가 발생합니다. 제한된 양의 데이터 흐름을 비교적 안정적으로 유지하는 데 충분할 수 있습니다.