Redis 캐시 침투, 캐시 충돌, 캐시 고장

이 글에서는 주로 Redis의 캐시 침투, 캐시 크래시, 캐시 고장에 대해 소개합니다.

은닉처

캐시의 역할?

일반적인 상황에서는 사용자가 백그라운드로 요청하면 먼저 캐시에서 데이터를 가져옵니다. 캐시에서 데이터를 가져오면
결과가 직접 반환되고, 데이터를 가져올 수 없으면 데이터베이스를 쿼리해야 하며, 데이터베이스에서 가져온 데이터가 캐시에 동기적으로 업데이트되어 결과가 반환됩니다. 다음 사용자는 캐시에서 직접 값을 얻을 수 있습니다. 그런 다음 데이터베이스에서 가져오지 않으면 빈 결과만 직접 반환할 수 있습니다.
따라서 캐싱의 주요 기능은 데이터의 부하 부담을 완화하고 요청 응답의 효율성을 높이는 것입니다.

캐시 침투

캐시 침투란 무엇입니까?

캐시 침투(Cache Penetration): 존재하지 않아야 할 데이터를 조회하는 것을
말하며 , 캐시가 누락되면 데이터베이스에서 캐시를 조회해야 하므로, 데이터를 찾을 수 없으면 캐시에 기록되지 않습니다 . 요청될 때마다 데이터베이스 로 이동하는 데이터
, 결과적으로 데이터베이스에 압력을 가하는 쿼리.

캐싱의 원인은 무엇입니까?

  • 비즈니스 설계가 불합리합니다 . 예를 들어 대부분의 사용자는 가드를 활성화하지 않지만 각 요청은 캐시되며
    특정 사용자 ID가 보호되는지 확인할 수 있습니다.
  • 업무/운영 및 유지/개발 오류 : 예를 들어, 캐시 및 데이터베이스에 있는 데이터가 실수로 삭제되는 경우입니다.
  • 해커 불법 요청 공격 : 예를 들어 해커는 존재하지 않는 비즈니스 데이터를 읽기 위해 의도적으로 다수의 불법 요청을 조작합니다.

캐시 침투를 방지하는 방법은 무엇입니까?

일반적으로 세 가지 방법이 있습니다.

  1. 인터페이스 매개변수 검증 : 불법 요청인 경우 API 항목에서 매개변수를 확인하고 잘못된 값을 필터링합니다. 일부 IP가 처리되어 블랙리스트에 추가됩니다.
  2. 캐시 null 값 : 쿼리 데이터베이스가 비어 있으면 캐시에 null 값이나 기본값을 설정할 수 있습니다. 그러나 쓰기 요청이 들어오면 캐시 일관성을 보장하기 위해 캐시를 업데이트해야 하며, 동시에 마지막에 캐시에 대해 적절한 만료 시간(예: 30초)을 설정해야 합니다. 이렇게 하면 공격하는 사용자가 ID를 사용하여 반복적으로 무차별 공격을 가하는 것을 방지할 수 있습니다.
  3. Bloom 필터 : Bloom 필터를 사용하면 데이터 존재 여부를 빠르게 확인할 수 있습니다. 즉, 쿼리 요청이 들어오면 먼저 Bloom 필터를 통해 해당 값이 존재하는지 판단한 후, 계속해서 존재하는지 확인하는 것입니다. 가능한 모든 데이터 해시를 충분히 큰 비트맵에 저장하면 존재해서는 안 되는 일부 데이터가 이 비트맵에 의해 가로채어 기본 스토리지 시스템에 대한 쿼리 부담을 피할 수 있습니다.

캐시 눈사태

캐시 눈사태란 무엇입니까?

캐시 눈덩이: 캐시에 있는 많은 양의 데이터가 만료되는 시간을 말하지만 쿼리 데이터의 양이 엄청나고 모든 요청이
데이터베이스에 직접 액세스하여 데이터베이스에 과도한 압력을 가하거나 심지어 시스템 다운을 초래하여 데이터베이스를 사용할 수 없게 만드는 것을 말합니다. .

캐시 사태를 해결하는 방법은 무엇입니까?

  1. 동기화 잠금을 사용하여 데이터베이스를 질의하는 스레드를 제어합니다 . 동시성이 그다지 높지 않은 경우 대기열과 잠금을 사용할 수 있습니다.
    동기화 잠금을 사용하여 데이터베이스를 질의하는 스레드를 제어합니다. 하나의 스레드만 데이터베이스를 질의할 수 있으며, 쿼리를 얻은 후 데이터는 캐시에 저장됩니다.
  2. 동일한 유형의 정보 키에 대해 서로 다른 만료 시간 설정
    동일한 유형의 키에 대해 만료 시간을 설정할 경우 만료 시간을 다르게 만들기 위해 임의의 시간을 추가합니다.
  3. 캐시 워밍업
    데이터베이스를 쿼리하고 캐시에 저장하기 위해 요청이 도착할 때까지 기다릴 필요 없이 미리 캐시에 데이터를 저장할 수 있습니다. 캐시 워밍업 메커니즘을 사용하는 경우 일반적으로 데이터베이스의 데이터를 캐시에 동기화하고 자동 갱신을 채택하는 특수 백그라운드 프로그램이 있습니다.
  4. 캐시 데이터베이스가 분산 방식으로 배포되면 핫스팟 데이터가 여러 노드에 고르게 분산될 수 있습니다.

캐시 분석

캐시 분석이란 무엇입니까?

캐시 분석: 캐시에 없거나, 만료되었으나 데이터베이스에 있는 데이터를 말하며, 이때 동시 사용자가 너무 많아 캐시에서
읽은 데이터가 없기 때문에 데이터베이스에서 직접 데이터를 가져옵니다. , 데이터베이스에 즉각적인 압력을 가합니다. 캐시 애벌런치(cache avalanche)와는 달리, 캐시 브레이크다운(cache Breakdown)은 동일한 데이터 조각을 동시에 쿼리하는 것을 의미하며 , 캐시 애벌런치(Cache Avalanche)는 서로 다른 데이터가 만료되어 많은 영역의 데이터를 쿼리할 수 없어 데이터베이스를 쿼리하는 것을 의미한다.

캐시 고장을 해결하는 방법은 무엇입니까?

  1. 뮤텍스 방식을 사용하여
    캐시를 무효화하는 경우 데이터베이스 데이터를 즉시 로드하는 대신 먼저 (Redis ✁ setnx)와 같은 성공적인 반환이 포함된 일부 원자성 작업 명령을 사용하여 작동한 다음 캐시에 성공하면 데이터베이스 데이터 및 설정을 로드합니다. 그렇지 않으면 캐시 가져오기를 다시 시도하세요.
  2. 핫스팟 키가 만료되지 않는다는
    것은 만료 시간이 설정되지 않았지만 핫스팟 데이터가 만료되려고 할 때 비동기 스레드가 업데이트되고 만료 시간을 설정함을 의미합니다.
  3. 시스템 충돌을 방지하기 위해 융합 및 다운그레이드를 잘 수행하십시오.

추천

출처blog.csdn.net/baidu_33256174/article/details/131864812