[session] Redis로 세션을 저장하는 것이 얼마나 안전합니까?

현재 MySql을 사용하여 세션을 저장하고 있습니다. 잘 작동하지만 약간 느립니다.

Redis를 사용하라는 요청을 받았지만 Redis가 쓰기 작업을 지연 시킨다는 소식을 들었 기 때문에 좋은 생각인지 궁금합니다. 세션은 실시간이어야하므로 조금 두렵습니다.

그런 문제를 겪은 사람이 있습니까?



답변

Redis는 세션 저장에 적합합니다. 모든 작업은 메모리에서 수행되므로 읽기 및 쓰기가 빠릅니다.

두 번째 측면은 세션 상태의 지속성입니다. Redis는 세션 상태를 하드 디스크에 유지하는 방법에 많은 유연성을 제공합니다. http://redis.io/topics/persistence 를 통해 자세히 알아볼 수 있지만 높은 수준의 옵션은 다음과 같습니다.

  1. 세션 손실을 감당할 수없는 경우 appendfsync always구성 파일에 설정하십시오. 이를 통해 Redis는 모든 쓰기 작업이 디스크에 저장되도록 보장합니다. 단점은 쓰기 작업이 느려진다는 것입니다.
  2. 약 1 초 분량의 데이터를 잃어도 괜찮다면 appendfsync everysec. 이것은 합리적인 데이터 보장으로 뛰어난 성능을 제공합니다.


답변

기본적으로 async snapsnots 및 fsync(). 그것들은 각각 RDB와 AOF라고 불립니다. 지속성 모드에 대한 자세한 내용 은 공식 페이지를 참조하십시오 .

데몬 화 된 프로세스의 신호 처리는 예를 들어 SIGTERM을 수신 할 때 디스크에 동기화되므로 재부팅 후에도 데이터가 그대로 유지됩니다. 기본 설정 (RDB 스냅 샷)을 사용하더라도 무결성 손상이 발생하기 전에 데몬이나 OS가 충돌해야한다고 생각합니다.

AOF 설정은 서버가 수신하는 명령을 기록하는 Append Only File을 사용하고 저장된 파일에서 콜드 스타트시 처음부터 DB를 다시 생성합니다. 기본 디스크 동기화 정책은 1 초에 한 번 플러시 (IIRC)하는 것이지만 모든 명령에 대해 잠금 및 쓰기로 설정할 수 있습니다.

스냅 샷과 증분 로그를 모두 사용하면 더 안전하지만 비용이 많이 드는 증분 로그를 사용하여 장기적 으로 신경 쓰지 않는 경우 데이터를 놓치는 방식을 모두 제공하는 것으로 보입니다 . Redis는 즉시 클러스터링을 지원하므로 복제도 수행 할 수 있습니다.

기본 RDB 설정을 직접 사용하고 스냅 샷을 원격 FTP에 저장하고 있습니다. 데이터 손실을 유발하는 오류를 아직 보지 못했습니다. 심각한 하드웨어 오류 또는 정전이 발생할 가능성이 높지만 VPS에서 호스팅됩니다. 그런 일이 일어날 가능성이 희박합니다 🙂


답변

이 질문은 실제로 실시간 세션에 관한 것이며 부분적으로는 ‘지연된 쓰기 작업’이라는 문구에 대한 오해로 인해 발생한 것 같습니다. 결국 세부 사항은 댓글에서 알려졌지만, 저는 그저 매우 명확하게 만들고 싶었습니다. ..

실시간 세션을 구현하는 데 문제가 없습니다.

Redis는 디스크에 대한 선택적 지속성을 가진 메모리 내 키-값 저장소입니다. ‘지연된 쓰기 작업’은 일반적으로 메모리에 존재하는 데이터베이스가 아닌 디스크쓰기를 의미합니다 . 키 / 값 쌍을 설정하면 즉시 (즉, 실시간으로) 가져올 수 있습니다. 지속성과 관련하여 선택한 정책 (쓰기를 지연하는 정도)에 따라 충돌시 손실 될 수있는 데이터 양의 상한이 결정됩니다.


답변