Redis 캐시 침투 및 캐시 눈사태 및 솔루션

Redis 캐시 침투 및 솔루션

1. 캐시 침투

1. 사용자가 조회 한 키가 redis에 존재하지 않고 해당 id가 데이터베이스에 존재하지 않는 경우 불법 사용자가 공격을 당하면 많은 요청이 DB에 직접 적중되어 다운 타임을 유발하고 영향을 미칩니다. 이 현상을 캐시 침투라고합니다.

2. 해결 방법 1 : 빈 문자열, 빈 개체, 빈 배열 또는 목록과 같은 빈 데이터 캐시, 코드는 다음과 같습니다.

if (list != null && list.size() > 0) {
                redisOperator.set("subCat:" + rootCatId, JsonUtils.objectToJson(list));
            } else {
                redisOperator.set("subCat:" + rootCatId, JsonUtils.objectToJson(list), 5*60);
            }

3. 솔루션 2 : 블룸 필터

블룸 필터 : 아래 그림과 같이 이진 시스템으로 만든 저장 장치가 상대적으로 작은 메모리를 차지하고있는 요소가 배열에 있는지 여부를 판단합니다. 0은 존재하지 않음, 1은 존재, 추가 쿼리 효율성은 매우 빠릅니다. 값이 저장 됨 블룸 필터 세트의 특정 위치에 해당 값을 저장하는 알고리즘을 거치게됩니다. 특정 위치에 여러 개의 키가있을 수 있습니다. 존재하지 않는 키 값이 전달되면 다음과 일치합니다. 일치하지 않으면 null을 반환
단점 : 1. 1 % 오판 율 블룸 어레이에 키가 없는데이 오판 단율로 인해 키가 존재한다고 판단 특정 상황에서 어레이 길이가 길수록 오 탐률이 낮아지고 어레이가 짧을수록 오 탐률이 높아집니다 ..
2. 키 값을 삭제하려면 해당 컨텐츠를 삭제합니다. 하지만 배열의 특정 위치에 한 쌍의 키가 있기 때문에 Bloom 배열을 삭제할 수 없습니다. 삭제하려면 1을 0으로 변경하지만 그 안에있는 모든 키 값은 삭제됩니다
우리가 레디 스 클러스터를 사용합니다. 우리가 추가로 수집을 유지해야하기 때문에 3. 코드의 복잡성이 증가 할 것이다., 꽃 필터는 레디 스와 함께 사용되어야한다
여기에 사진 설명 삽입

둘째, Redis 캐시 눈사태

1. 캐시 눈사태 : 캐시의 데이터가 대량으로 무효화되고이 용도로 많은 요청이 들어오지 만 redis의 키가 모두 무효화되어 모든 요청이 db로 전송되어 다운 타임이 발생합니다.

2. 솔루션

1. 해당 단축키를 만료되지 않도록 설정합니다
. 2. 만료 시간이 시차를두고 만료 시간이 무작위로 생성되며 핫 데이터의 만료 시간을 더 길게 설정할 수 있으며 비핫 데이터는 더 짧게 설정할 수 있습니다
. 다음과 같은 여러 캐시의 조합 : 요청 항목, redis가없는 경우 지금 redis를 요청한 다음 Memcache가 없으면 요청한 다음 db를 요청합니다
. 4. 타사 Redis 조달 (Alibaba Cloud 또는 Tencent Cloud의 redis)

추천

출처blog.csdn.net/qq_43141726/article/details/114499061