Redis 캐시 침투 문제

캐시 침투는 클라이언트가 요청한 데이터가 캐시나 데이터베이스에 존재하지 않으므로 캐시가 적용되지 않으며 이러한 요청이 데이터베이스에 도달한다는 의미입니다.

일반적인 솔루션:

빈 객체 캐시 : 첫 번째 요청에서 Redis 또는 데이터베이스에 존재하지 않는 것으로 확인되면 요청 데이터를 키로 설정하고 값을 null로 설정하여 캐시에 배치할 수 있습니다.

그러나 이러한 요청이 너무 많으면 과도한 메모리 압박이 발생한다는 문제가 있습니다. 해결책은 만료 시간을 5분으로 설정하는 것입니다. 그러나 나중에 이 키에 값을 할당하면 단기적인 데이터 불일치가 발생합니다.

장점: 구현이 간단하고 유지 관리가 쉽습니다.

단점: 추가 메모리 소비로 인해 단기적인 데이터 불일치가 발생할 수 있습니다.

Bloom filter : redis 이전에 수행하는 작업으로, 즉 요청을 보낼 때 캐시를 먼저 확인하지 않고 Bloom 필터를 먼저 확인하며, Bloom 필터가 없으면 바로 거부한다. 존재한다고 생각되면 해제되지만 해당 데이터가 반드시 Redis나 데이터베이스에 존재하는 것은 아닙니다.

원리: 특정 해시 알고리즘을 기반으로 데이터베이스에 있는 데이터의 해시 값을 계산한 후, 해시 값을 바이너리 비트로 변환하여 Bloom 필터에 저장하고 판단하게 합니다. 존재해서는 안 되는 데이터를 거부합니다.

장점: 메모리 사용량이 적고 중복 키가 없음

단점: 구현이 복잡하고 오판의 가능성이 있다.

기타 솔루션:

ID 규칙을 추측하지 않도록 매개변수의 복잡성을 강화합니다.

데이터의 기본 형식 확인 수행

반드시 로그인해야 접속할 수 있도록 설정하는 등 사용자 권한 검증을 강화합니다.

핫스팟 매개변수의 현재 흐름을 제한하는 일을 잘 수행하십시오.

추천

출처blog.csdn.net/wfdfg/article/details/133324618