>  기사  >  데이터 베이스  >  Redis 삭제 정책 및 제거 정책

Redis 삭제 정책 및 제거 정책

咔咔
咔咔원래의
2020-05-28 18:29:591407검색

이 글의 지식 포인트

만료된 데이터 개념

데이터 삭제 전략

퇴거 알고리즘

만료된 데이터


먼저 세 가지 핵심 값인 성별, 이름, 나이를 살펴보겠습니다.


이 세 가지 값을 설정하는 지침은 이름 설정 kaka setex age 100 24 setex sex 10 1 p data -lake-id="5fa28f4678413c9d57fd08c44543396f" style="color: rgb(38, 38, 38); 줄 높이: 1.74; 문자 간격: 0.05em; 개요 스타일: 없음; 오버플로 랩: 중단 단어 ; 여백 - 상단: 0px; 마진-하단: 0px;"><code style="font-size: inherit; background-color: rgba(0, 0, 0, 0.06); padding: 0px 2px; border: 1px solid rgba(0, 0, 0, 0.08); border-radius: 2px; line-height: inherit; overflow-wrap: break-word;">set name kaka setex age 100 24 setex sex 10 1


Redis 삭제 정책 및 제거 정책

在redis中我们可以使用ttl来获取某个key的状态,下面我们来使用ttl

Redis 삭제 정책 및 제거 정책


redis에서는 ttl을 사용하여 특정 값을 얻을 수 있습니다. 키 상태, ttl 위에서 각각 이름, 나이, 성별 상태를 확인하실 수 있습니다. 각각 -1 775 -2

세 가지 값입니다.


그러면 이 세 가지 값은 어떤 정보를 제공하는 걸까요!


  • -1은 영구적으로 유효한 데이터를 나타냅니다.
  • 775 이 값은 age에 설정되며 사용되는 명령은 setex age 1000 24로 남은 유효 시간을 나타냅니다.
  • -2는 만료된 데이터 또는 삭제된 데이터를 나타냅니다. 정의된 데이터
    Redis 삭제 정책 및 제거 정책


만료된 데이터의 저장 구조


  • 시간에 민감한 이름을 설정하면 redis는 메모리 주소 0x10101을 저장합니다.
  • 그러면 redis는 데이터를 저장할 또 다른 공간을 엽니다. 시간에 민감한 키
  • 하지만 저장 방법은 키에 해당하는 메모리 주소와 만료 시간
    Redis 삭제 정책 및 제거 정책
    그래서 오늘 이야기하는 Redis 삭제 전략은 이 부분의 데이터를 삭제하는 것입니다.


예약 삭제


예약 삭제는 타이머를 작성하고 키 시간이 만료되면 타이머 작업이 만료된 키를 즉시 삭제합니다


장점: 다음과 같은 경우 키가 삭제된다고 상상할 수 있습니다. 만료됩니다. 확실히 가장 메모리 친화적이고 메모리를 절약합니다


단점: Redis의 단일 스레드 기능은 모든 명령이 특정 순서로 실행된다는 것입니다. 만료된 키 값을 삭제하면 CPU에 더 많은 부담이 가해지며 이는 Redis 서버 응답 시간 및 IO에 직접적인 영향을 미칩니다. 예약 삭제는 공간을 교환하는 데 시간을 사용하는 것을 의미하며 만료된 메모리는 삭제됩니다. 영역도 직접 삭제됩니다.



Lazy 삭제

Redis 삭제 정책 및 제거 정책이 사진을 보면 키 값이 만료되면 바로 삭제되지 않는데 언제 삭제되나요? 계속 읽어보세요

Redis 삭제 정책 및 제거 정책


지연 삭제를 사용하면 데이터가 만료되어도 자동으로 삭제되지 않습니다. 그런 다음 삭제 방법은 다음에 키 값을 얻을 때 키를 결정하는 것입니다. 만료 여부. 만료된 경우 삭제합니다.


즉, get name이 다시 실행되면 함수가 실행됩니다.expirelfNeeded() 이 함수는 키가 만료되었는지 확인하는 함수입니다. 만료된 것은 nil을 반환하고 메모리에서 삭제합니다.


Redis 삭제 정책 및 제거 정책

장점: 일정량의 CPU 성능이 저하되며, 삭제가 필요한 경우에만 삭제됩니다.


단점: 확실히 그렇습니다 핫스팟을 통과한 후에는 거의 아무도 키에 액세스하지 않으면 항상 존재하며 일정량을 차지합니다. 오랫동안 기억공간


즉, 이 방법은 공간을 시간과 맞바꾸는 것입니다


정기 삭제


위에서 두 가지 삭제 방법을 언급했는데, 하나는 예약 삭제이고 다른 하나는 지연 삭제입니다. 하나는 시간과 공간을 교환하는 것입니다. 하나는 시간을 공간과 교환하는 것입니다. 두 옵션 모두 상대적으로 극단적인 접근 방식입니다. 그러면 정기삭제 실시계획을 살펴보겠습니다.


먼저 redis의 저장 공간을 살펴보겠습니다. 기본값은 총 16개입니다. 이를 제어하기 위한 구성 매개변수 데이터베이스가 redis.conf에 있습니다. 각 데이터베이스에는 데이터 주소와 데이터 만료 시간을 저장하는 자체 만료 파티션이 있습니다.


Redis 삭제 정책 및 제거 정책

구현 방법


redis가 시작되면 서버 아래의 hz 값을 읽으며 기본값은 10입니다. 이 값은 터미널info server


을 사용하여 직접 볼 수 있습니다.

Redis 삭제 정책 및 제거 정책

그런 다음 서버는 초당 hz씩 실행되어 serverCron() 폴링을 수행합니다


계속해서 데이터베이스Cron을 사용하여 16개의 Redis 라이브러리의 정보에 하나씩 액세스합니다


이렇게 됩니다 activeExpireCycel은 각각의 만료[*]를 하나씩 감지하고 각각의 실행 시간은 250ms/서버 hz입니다. 이 매개변수


각 만료[*]를 하나씩 감지하면 ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC가 실행됩니다.


  • 키가 시간 초과되면 키를 직접 삭제하세요
  • 한 라운드에 삭제된 키 수>ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC*25% 프로세스를 계속 순환합니다
  • 키가 삭제된 경우 한 라운드에<=ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC25% , 다음 만료 확인[]


이제 문제가 발생합니다. 250ms/hz 시간이 실행되었지만 만료된 16개의 데이터베이스가 아직 만료되지 않은 경우 어떻게 해야 합니까? 순환되었습니다! 다음에는 어느 도서관에서 자전거를 탈까요? 실제로 이 값이 존재하는데, current_db의 값입니다. 이 값은 activeExpireCycel을 기록하고 다음에 만료[*]

에 들어갈 때 실행됩니다.

Redis 삭제 정책 및 제거 정책

특징 1: CPU 사용량이 최고치에 달하지 않으며 감지 빈도에 대한 사용자 정의 설정


특징 2: 메모리 압력이 그다지 높지 않으며 오랫동안 점유된 메모리가 지속적으로 정리됩니다. up


제거 알고리즘


위에서 세 가지 삭제 전략을 언급했지만 이 세 가지 전략은 유효 기간이 설정된 키에 대해서만 효과적입니다.


이제 Redis의 메모리 사용량이 부족하므로 제거 정책을 사용하여 Redis의 정상적인 사용을 보장하겠습니다.


redis는 각 명령이 실행되기 전에 메모리가 충분한지 확인하기 위해 freeMemorylfNeeded()를 호출합니다. 메모리가 충분하지 않으면 일부 키가 지워집니다. 이 데이터 지우기 전략을 제거 전략이라고 합니다.


redis의 최대 사용 가능한 메모리 매개변수는 maxmemory입니다. 기본값은 0입니다. 이는 물리적 메모리가 차지하는 비율을 나타냅니다. 일반적으로 50%로 설정하면 충분합니다


매번 삭제할 키 수 선택: maxmemory-samples


삭제 전략: maxmemory-policy


삭제 전략에 집중


  • 휘발성 데이터 감지( 즉, 유효 기간을 설정했지만 아직 만료되지 않은 데이터는 위의 만료[*])입니다.
      다음으로 사진을 보세요
      • 9s는 현재 시간입니다
      • 9s에서 가장 긴 키는 age
      • 가장 적게 사용되는 키는 성별입니다
      • 휘발성-lru를 팔로우하면 age가 삭제됩니다
      • 휘발성-lfu를 팔로우하면 성별이 삭제됩니다.
        Redis 삭제 정책 및 제거 정책
      • 모든 데이터 감지
        • allkeys-lru: 가장 최근에 사용된 데이터 선택
        • allkeys-lfu: 가장 최근에 사용된 데이터 선택
        • allkeys-random: 무작위 전체 데이터베이스에서 삭제
      • 데이터 제거 포기
        • no-enviction: 메모리를 모두 사용할 때까지 데이터가 삭제되지 않아 oom 오류가 발생합니다.


      Summary


      위는 데이터용 Redis의 삭제 전략과 Eviction 전략이다.


      여기서 주의할 점은 퇴거 정책에서 휘발성 데이터는 만료 시간이 설정된 키를 의미하며 영구적인 값이 아니라는 점입니다.


      전체 데이터베이스는 만료 시간과 영구 데이터 세트를 포함한 모든 값을 나타냅니다.

위 내용은 Redis 삭제 정책 및 제거 정책의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.