1. 개념
캐시 침투의 개념은 매우 간단합니다. 사용자가 데이터를 쿼리하려고 하는데 Redis 메모리 데이터베이스에 해당 데이터가 없다는 것을 알게 됩니다. hit이므로 지속성 계층 데이터베이스를 쿼리합니다. 아무것도 없는 것으로 확인되어 이 쿼리는 실패했습니다. 사용자가 많을 경우 캐시에 적중되지 않으므로 모두 지속성 계층 데이터베이스를 요청합니다. 캐시 침투가 발생하면 지속성 계층 데이터베이스에 큰 부담이 발생합니다.
캐시 분해와 캐시 분해의 차이에 주의해야 합니다. 캐시 분해는 매우 뜨겁고 지속적으로 큰 동시성을 전달하는 키를 의미하며 현재 키가 실패할 때 이 지점에 액세스하는 데 집중합니다. , 연속적인 대규모 동시성은 캐시를 뚫고 데이터베이스를 직접 요청하는데, 이는 마치 장벽에 구멍을 뚫는 것과 같습니다.
캐시 침투를 방지할 수 있는 솔루션은 실제로 많습니다. 아래에 몇 가지를 소개합니다.
2. 솔루션
(1) 블룸 필터
통계에 따르면 전 세계적으로 정크 웹 사이트와 일반 웹 사이트의 수는 수십억 개에 달합니다. 이 크기의 데이터에 대한 구조입니다. Bloom 필터를 사용하면 인터넷 경찰이 데이터베이스의 스팸 웹사이트를 하나씩 비교할 필요가 없습니다. 1억 개의 스팸 웹사이트 주소를 저장한다고 가정해 보겠습니다.
먼저 1억 개의 바이너리 비트를 가질 수 있으며, 인터넷 경찰은 8개의 서로 다른 난수 생성기(F1, F2, …, F8)를 사용하여 8개의 정보 지문(f1, f2, …, f8)을 생성합니다. 다음으로, 난수 생성기 G를 사용하여 이들 8개의 정보 지문을 1부터 1억까지의 8개의 자연수 g1, g2, …, g8에 매핑합니다. 마지막으로 이 8개 위치의 바이너리 값을 1로 설정합니다. 과정은 다음과 같습니다.
어느 날 인터넷 경찰은 의심스러운 웹사이트를 발견하고 XX 웹사이트인지 확인하려고 했습니다. 먼저 의심스러운 웹사이트는 1억 비트 배열의 8포인트로 해싱되었습니다. 1이 아닌 점이 있으면 해당 요소가 집합에 없는 것임을 확인할 수 있습니다.
그렇다면 이 Bloom 필터는 Redis의 캐시 침투를 어떻게 해결합니까? 우선, 가능한 모든 쿼리 매개변수는 해시 형식으로 저장됩니다. 사용자가 쿼리를 원할 때 Bloom 필터를 사용하여 컬렉션에 없는지 확인한 다음 지속성 레이어를 쿼리하지 않고 직접 삭제합니다. .
이 양식은 매우 간단합니다.
2. 빈 개체 캐시
저장 계층이 누락되면 반환된 빈 개체도 캐시되며, 나중에 데이터에 액세스하면 캐시에서 가져옵니다. 백엔드 데이터 소스가 보호됩니다
그러나 이 방법에는 두 가지 문제가 있습니다.
널 값이 캐시에서 많은 키 위치를 차지할 수 있으므로 캐시에는 더 많은 키를 저장하기 위해 더 많은 공간이 필요합니다. 값 쌍
null 값에 만료 시간을 설정하더라도 캐시 계층과 스토리지 계층의 데이터 간에 기간 불일치 기간이 여전히 존재하며 이는 유지 관리가 필요한 비즈니스에 영향을 미칩니다. 일관성.
1. 개념
Cache Avalanche는 캐시 계층에 오류가 있어 제대로 작동하지 않는다는 의미입니다. 결과적으로 모든 요청이 스토리지 계층으로 전송되어 스토리지 계층에 대한 호출량이 급격히 증가하고 잠재적으로 충돌이 발생할 수 있습니다.
2. 해결 방법
(1) redis 고가용성
이 아이디어의 의미는 Redis가 실패할 수 있으므로 Redis를 몇 개 더 추가하여 하나가 실패하도록 하는 것입니다. 실제로 구축된 클러스터인 다른 작업은 계속 작동할 수 있습니다.
(2) Current Limiting Downgrade
이 솔루션의 아이디어는 잠금 또는 대기열 방법을 사용하여 캐시가 만료된 후 데이터베이스를 읽고 캐시에 쓰는 스레드 수를 제어하는 것입니다. 예를 들어 특정 키를 작동하기 위해 하나의 스레드만 데이터를 쿼리하고 캐시를 쓰는 것이 허용되고, 다른 스레드는 기다려야 합니다.
(3) 데이터 워밍업
데이터 워밍업의 의미는 정식 배포 전에 먼저 가능한 데이터에 미리 액세스하여 대량으로 액세스할 수 있는 일부 데이터를 로드한다는 것입니다. 캐시. 다양한 키의 캐시 로드를 수동으로 트리거하고 다양한 만료 시간을 설정하여 캐시 무효화 시간의 균형을 맞추고 동시에 많은 수의 액세스가 발생하는 것을 방지합니다.
위 내용은 Redis 캐시 침투 및 캐시 눈사태의 개념은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!