>  기사  >  Redis가 차단되면 어떻게 해야 할까요?

Redis가 차단되면 어떻게 해야 할까요?

(*-*)浩
(*-*)浩원래의
2019-05-31 14:14:132961검색

Redis의 이벤트 루프는 단일 스레드 프로그램이므로 이벤트 처리 지연이 짧은지 확인하여 Redis 데이터 양이 많아도 이벤트 루프의 후속 작업이 차단되지 않도록 하는 것이 중요합니다. 특정 수준(예: 20G)에 도달하면 차단 작업은 성능에 특히 심각한 영향을 미칩니다.

Redis가 차단되면 어떻게 해야 할까요?

아래에서는 Redis에서 시간이 많이 걸리는 시나리오와 대처 방법을 요약합니다.

장시간 명령으로 인해 차단이 발생합니다.

keys, sort 및 기타 명령

keys 명령은 주어진 패턴과 일치하는 모든 키를 찾는 데 사용됩니다. 시간 복잡도는 O(N)입니다. 여기서 N은 데이터베이스의 키 수입니다. 데이터베이스의 항목 수가 수천만 개에 도달하면 이 명령으로 인해 읽기 및 쓰기 스레드가 몇 초 동안 차단됩니다. 유사한 명령에는 키 및 정렬과 같은 작업을 비즈니스에서 사용해야 하는 경우와 같은 작업이 포함됩니다. 요구 사항?

해결책:

아키텍처 설계에는 빠른 처리 요청과 느린 처리 ​​요청을 분리하는 "전환"이라는 트릭이 있습니다. 그렇지 않으면 느린 요청이 빠른 요청에 영향을 미치게 됩니다. 빠른 것 속도도 빠르지 않습니다. Redis의 순수 메모리 작업과 epoll 비차단 IO 이벤트 처리는 하나의 스레드에서 빠르게 수행될 수 있지만 지속성, AOF 재작성 및 마스터-슬레이브 시간은 매우 빠릅니다. 데이터 동기화와 같은 소비 작업은 별도의 프로세스에서 처리해야 하며 느린 프로세스는 마찬가지로 빠른 프로세스에 영향을 주어서는 안 됩니다. 키와 같이 시간이 많이 걸리는 작업을 사용해야 하기 때문에 별도의 프로세스를 여는 등의 작업을 분리합니다. Redis 슬레이브 노드는 키 및 정렬과 같은 시간이 많이 걸리는 작업에 특별히 사용됩니다. 이러한 쿼리는 일반적으로 쿼리가 느릴수록 작업을 완료하는 것이 느려집니다. 온라인에서 빠르게 소모되는 작업에는 적합하지 않습니다.

smembers 명령은 전체 세트를 얻는 데 사용되며, 시간 복잡도는 O(N)이며, 세트가 10을 저장하는 경우입니다. 수백만 개의 데이터를 한 번에 검색할 수 있습니다. 또한 이벤트 처리 스레드가 오랫동안 차단될 수 있습니다.

해결책:

sort, 키 및 기타 명령과 달리 smembers는 다음과 같은 명령일 수 있습니다. 온라인 실시간 응용 프로그램 시나리오에서 매우 자주 사용됩니다. 여기에는 적합하지 않습니다. 설계 단계에서 더 많이 고려해야 하며, 컬렉션 수를 일반적으로 유지할 수 있습니다. 예를 들어, 하나의 키를 사용하여 1년 동안의 기록을 저장하는 경우 데이터 양이 크면 12개의 키를 사용하여 12개월 동안 기록을 저장하거나 365개의 키를 사용하여 매일 기록을 저장하여 크기를 제어할 수 있습니다.

컬렉션을 여러 하위 컬렉션으로 나누는 것이 쉽지 않지만 대규모 컬렉션을 사용하여 보관해야 하는 경우 컬렉션을 가져올 때 SRANDMEMBER 키 [count]를 사용하는 것을 고려할 수 있습니다. 물론 컬렉션의 모든 요소를 ​​순회하려는 경우에는 이 명령이 적합하지 않습니다.

위 내용은 Redis가 차단되면 어떻게 해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.