Redis 캐 시 에 대한 3 대 문제 및 해결 방안

5225 단어 Redis캐 시
Redis 는 시스템 의 캐 시 에 자주 사 용 됩 니 다.그러면 현재 IO 장치 가 인터넷 응용 프로그램의 대량의 읽 기와 쓰기 요 구 를 만족 시 키 지 못 하 는 문 제 를 해결 할 수 있 습 니 다.
1.캐 시 관통
캐 시 관통 이란 캐 시 와 데이터베이스 에 없 는 데 이 터 를 가리 키 며,사용자 가 id 가-1 인 데이터 나 매우 큰 존재 하지 않 는 데 이 터 를 요청 하 는 것 을 말한다.해커 가 구멍 공격 을 이용 해 응용 데이터 베 이 스 를 무 너 뜨 릴 수도 있다.
1.일반적인 해결 방안
캐 시 관통 문제 에 대해 흔히 볼 수 있 는 해결 방안 은 다음 과 같은 세 가지 가 있다.
4.567917.인증 차단:인터페이스 층 을 검사 합 니 다.예 를 들 어 사용자 권한 을 감정 하고 ID 와 같은 필드 를 기본 적 인 검 사 를 합 니 다.예 를 들 어 id<=0 의 필드 를 직접 차단 합 니 다4.567917.캐 시 빈 데이터:데이터 베 이 스 를 조회 한 데이터 가 비어 있 을 때 도 이 데 이 터 를 캐 시 하지만 캐 시 의 유효성 은 정상 적 인 데이터 캐 시 에 영향 을 주지 않도록 짧게 설정 해 야 합 니 다

Copypublic Student getStudentsByID(Long id) {

//  Redis       
Student student = redisTemplate.opsForValue()
    .get(String.valueOf(id));
if (student != null) {
    return student;
}

//           ,   Redis
student = studentDao.selectByStudentId(id);
if (student != null) {
    redisTemplate.opsForValue()
        .set(String.valueOf(id), student, 60, TimeUnit.MINUTES);
} else {
    //      ,        
    redisTemplate.opsForValue()
        .set(String.valueOf(id), null, 60, TimeUnit.SECONDS);
}

return student;

}

부 릉 필 터 를 사용 합 니 다:부 릉 필 터 는 비교적 독특한 데이터 구조 로 일정한 오차 가 있 습 니 다.데이터 가 존재 하 는 것 을 지정 할 때 반드시 존재 하 는 것 은 아니 지만 데이터 가 존재 하지 않 는 다 고 지정 할 때 존재 하지 않 을 것 입 니 다.
2.부 릉 필터
부 릉 필 터 는 비교적 특수 한 데이터 구조 로 HashMap 과 유사 합 니 다.업무 중 에 우 리 는 HashMap 을 사용 하여 하나의 값 이 존재 하 는 지 여 부 를 판단 할 수 있 습 니 다.O(1)시간 복잡 도 에서 결 과 를 되 돌 릴 수 있 고 효율 이 매우 높 지만 저장 용량 에 제한 을 받 습 니 다.만약 에 판단 해 야 할 값 이 억 단 계 를 초과 할 수 있다 면그럼 HashMap 이 차지 하 는 메모리 가 굉장 합 니 다.
블 룸 필터 가 이 문 제 를 해결 하 는 방안 은 간단 하 다.먼저 여러 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트
하나의 요소 가 존재 하 는 지 판단 할 때 이 값 해시 가 나 온 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트하지만 비트 비트 가 1 이 아니라면 이 키 는 존재 하지 않 을 것 이다.

메모:BloomFilter 는 삭제 작업 을 지원 하지 않 고 추가 작업 만 지원 합 니 다.이 점 은 쉽게 이해 할 수 있 습 니 다.데 이 터 를 삭제 하려 면 해당 하 는 bit 위 치 를 0 으로 해 야 하기 때 문 입 니 다.그러나 이 Key 에 대응 하 는 bit 위 치 는 다른 Key 도 대응 할 수 있 습 니 다.
3.캐 시 빈 데이터 와 부 릉 필터 의 비교
위 에서 이 두 가지 방안 에 대해 간단 한 소 개 를 했 습 니 다.캐 시 빈 데이터 와 부 릉 필 터 는 캐 시 투과 문 제 를 효과적으로 해결 할 수 있 지만 사용 장면 은 약간 다 릅 니 다.
4.567917.일부 악의 적 인 공격 조회 키 가 각각 다 르 고 수량 이 많 을 때 캐 시 빈 데 이 터 는 좋 은 해결 방안 이 아니다.모든 키 를 저장 해 야 하기 때문에 메모리 공간 이 높 습 니 다.그리고 이런 상황 에서 많은 key 는 한 번 만 사용 할 수 있 기 때문에 저장 하 는 것 은 의미 가 없다.그래서 이런 상황 에서 부 릉 필 터 를 사용 하 는 것 은 좋 은 선택 이다4.567917.빈 데이터 와 의 Key 수량 이 제한 되 어 있 고 Key 중복 요청 효율 이 높 은 장면 에서 빈 데 이 터 를 캐 시 하 는 방안 을 선택 할 수 있 습 니 다2.캐 시 뚫 기
캐 시 격 차 는 현재 핫 이 슈 데이터 저장 이 만 료 되 었 을 때 여러 스 레 드 가 동시에 핫 이 슈 데 이 터 를 방문 하 는 것 을 말한다.캐 시가 만 료 되 었 기 때문에 모든 동시 요청 은 데이터베이스 에 가서 데 이 터 를 조회 합 니 다.
해결 방안
4.567917.핫 이 슈 데 이 터 를 기한 이 지나 지 않 는 것 으로 설정 합 니 다4.567917.상호 배척 자물쇠 추가:상호 배척 자 물 쇠 는 데이터 베 이 스 를 조회 하 는 스 레 드 접근 을 제어 할 수 있 지만 이런 방안 은 시스템 의 스루풋 이 떨 어 지고 실제 상황 에 따라 사용 해 야 한다

Copypublic String get(key) 
{
    String value = redis.get(key);
    if (value == null) 
    {
        //         //   3min   ,  del       ,          
        load db if (redis.setnx(key_mutex, 1, 3 * 60) == 1) {
            //       
            value = db.get(key);
            redis.set(key, value, expire_secs);
            redis.del(key_mutex);
        }
        else {
            //                 load db       ,            
            sleep(50);
            get(key);
            //   
        }
    }
    else {
        return value;
    }
}
3.캐 시 눈사태
캐 시 눈사태 가 발생 하 는 몇 가지 상황 이 있 습 니 다.예 를 들 어 대량의 캐 시가 집중 되 거나 캐 시가 동시에 큰 범위 에서 효력 을 잃 고 데이터 베 이 스 를 방문 하 라 는 요청 이 많이 발생 하여 CPU 와 메모리 가 과부하 되 고 심지어 정지 되 었 습 니 다.
간단 한 눈사태 과정:
  • Redis 군집 에 대면 적 고장 이 발생 했다
  • 캐 시 에 실 패 했 습 니 다.이때 Redis 캐 시 서버 에 접근 하 라 는 요청 이 많 습 니 다
  • 대량의 Redis 요청 이 실 패 했 을 때 이 요청 들 은 데이터 베 이 스 를 방문 할 것 입 니 다
  • 4.567917.응용 디자인 이 데이터 베이스 와 Redis 서비스 에 의존 하기 때문에 곧 서버 클 러 스 터 의 눈사태 가 발생 하여 전체 시스템 이 마비 된다해결 방안
    4
  • [사전]고가 용 캐 시:고가 용 캐 시 는 전체 캐 시 고장 을 방지 합 니 다.개별 노드,기계,심지어 기관실 이 닫 혀 도 시스템 은 서 비 스 를 제공 할 수 있 고 Redis 보초병(Sentinel)과 Redis 클 러 스 터(Cluster)는 모두 높 은 사용 을 할 수 있다
  • 4.567917.[사 중]캐 시 강등(임시 지원):방문 횟수 가 급 격 히 증가 하여 서비스 에 문제 가 생 겼 을 때 저 희 는 서 비 스 를 어떻게 사용 할 수 있 는 지 확인 합 니 다.국내 에서 비교적 많이 사용 되 는 것 은 Hystrix 로 용 단,강등,제한 세 가지 수단 을 통 해 눈사태 발생 후의 손실 을 낮 춘 다.데이터베이스 가 죽지 않 는 다 면 시스템 은 항상 요청 에 응 할 수 있 습 니 다.매년 설 12306 에 우 리 는 이렇게 오지 않 습 니까?응답 할 수만 있다 면 적어도 표를 빼 앗 을 기회 가 있다
  • [사후]Redis 백업 과 빠 른 예열:Redis 데이터 백업 과 복구,빠 른 캐 시 예열
  • 레 디 스 캐 시 에 관 한 3 대 문제 와 해결 방안 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.레 디 스 캐 시 문제 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기