>데이터 베이스 >Redis >Redis의 생존 및 만료 시간 설정 원리 분석

Redis의 생존 및 만료 시간 설정 원리 분석

WBOY
WBOY앞으로
2022-08-30 13:51:182402검색

추천 학습: Redis 비디오 튜토리얼

원리를 이해하기 전에 먼저 사용 방법을 살펴보겠습니다.

EXPIRE 명령 또는 PEXPIRE 명령을 통해 클라이언트는 특정 키에 대한 생존을 설정할 수 있습니다. 초 또는 밀리초 정밀도의 데이터베이스 지정된 시간(초 또는 밀리초)이 지나면 서버는 자동으로 수명이 0인 키를 삭제합니다.

SETEX 명령은 문자열 키를 설정하는 동안 키의 만료 시간을 설정할 수 있습니다(문자열 키에만 사용할 수 있음)

EXPIRE 명령 및 PEXPIRE 명령과 유사하게 클라이언트는 EXPIREAT 명령 또는 PEXPIREAT 명령을 사용할 수 있습니다. , 데이터베이스의 키 만료 시간을 초 또는 밀리초 단위로 설정하세요

만료 시간은 UNIX 타임스탬프입니다. 키 만료 시간이 오면 서버가 자동으로 데이터베이스에서 키를 삭제합니다

TTL 명령 PTTL 명령은 수명 또는 만료 시간이 있는 키를 승인하고 키의 남은 수명, 즉 키가 서버에 의해 자동으로 삭제되기까지 걸리는 시간을 반환합니다.

Redis에는 4개의 키가 있습니다. Different 명령을 사용하여 키의 수명(키가 존재할 수 있는 기간) 또는 만료 시간(키가 삭제되는 시점)을 설정할 수 있습니다.

  • EXPIRE 명령은 키의 수명을 설정하는 데 사용됩니다. ttl 초의 열쇠입니다.
  • PEXPIRE 명령은 키 수명을 ttl 밀리초로 설정하는 데 사용됩니다.
  • EXPIREAT 명령은 타임스탬프에 지정된 키의 만료 시간을 초 단위로 타임스탬프에 설정하는 데 사용됩니다.
  • PEXPIREAT 명령은 타임스탬프에 지정된 키의 만료 시간을 밀리초 단위로 설정하는 데 사용됩니다.

원리

설정 명령에는 다양한 단위와 형태가 있지만 실제로 EXPIRE, PEXPIRE, EXPIREAT 세 가지 명령은 모두 PEXPIREAT 명령을 사용하여 구현됩니다.

클라이언트가 위의 네 가지 명령을 실행하는지 여부에 관계없이 어떤 명령이 변환되든 최종 실행 효과는 PEXPIREAT 명령을 실행하는 것과 동일합니다.

redisDb 구조의 만료 사전은 데이터베이스에 있는 모든 키의 만료 시간을 저장합니다. 우리는 이 사전을 만료 사전이라고 부릅니다.

만료 사전의 키는 데이터베이스의 키 개체를 가리키는 포인터입니다. 키 공간(데이터베이스 키이기도 함)

만료 사전의 값은 long long 유형의 정수입니다. 이 정수는 키가 가리키는 데이터베이스 키의 만료 시간(밀리초 단위의 UNIX 타임스탬프)을 저장합니다.

다음 그림은 만료 사전이 있는 데이터베이스의 예를 보여줍니다. 이 예에서 키 공간은 데이터베이스의 모든 키-값 쌍을 저장하고 만료 사전은 데이터베이스 키의 만료 시간을 저장합니다.

표시의 편의를 위해 그림의 키 공간과 만료 사전에는 알파벳 키 개체와 책 키 개체가 두 번 반복됩니다. 실제로 키 공간의 키와 만료 사전의 키는 동일한 키 객체를 가리키므로 중복 객체가 없고 공간이 낭비되지 않습니다.

그림의 만료 사전은 두 개의 키-값 쌍을 저장합니다.

첫 번째 키-값 쌍의 키는 알파벳 키 개체이고 값은 1385877600000입니다. 데이터베이스 키 알파벳은 1385877600000(2013년 12월 1일 0:00)입니다.

두 번째 키-값 쌍의 키는 책 키 객체이고, 값은 1388556000000입니다. 이는 데이터베이스 키 책의 만료 시간이 1388556000000(2014년 1월 1일 0시)임을 의미합니다. 클라이언트가 PEXPIREAT 명령(또는 PEXPIREAT 명령으로 변환되는 다른 세 가지 명령)을 실행하여 데이터베이스 키의 만료 시간을 설정하면 서버는 지정된 데이터베이스 키와 만료 시간을 데이터베이스의 만료 사전에 연결합니다.

서버가 다음 명령을 실행한 후

만료 사전은 그림에 표시된 대로 키-값 쌍을 추가합니다. 여기서 키는 메시지 키 개체이고 값은 1391234400000(2014년 2월 1일 0:00)입니다. 다음은 PEXPIREAT 명령의 의사 코드입니다. 코드 정의

PERSIST 명령은 키의 만료 시간을 제거할 수 있습니다

PERSIST 명령은 PEXPIREAT 명령의 역 작업입니다. PERSIST 명령은 키의 만료 시간을 찾습니다. 만료 사전에 키를 지정하고 만료 사전에서 키와 값(만료 시간) 연결을 해제합니다.

만료된 키 확인

만료 사전을 사용하면 프로그램은 다음 단계를 사용하여 주어진 키가 만료되었는지 확인할 수 있습니다.

1) 주어진 키가 만료 사전에 존재하는지 확인합니다. 존재하는 경우 다음을 가져옵니다. 키의 만료 시간.

2) 현재 UNIX 타임스탬프가 키 만료 시간보다 큰지 확인하세요. 그렇다면 키가 만료된 것입니다. 그렇지 않으면 키가 만료되지 않은 것입니다. 이 프로세스는 의사 코드로 설명할 수 있습니다.

만료 시간이 1385877600000(2013년 12월 1일 0:00)인 주요 알파벳의 경우:

현재 시간이 1383282000000(2013년 11월 1일)인 경우 day zero ), is_expired(alphabet)를 호출하면 현재 시간이 알파벳 키의 만료 시간보다 작기 때문에 False가 반환됩니다.

반면, 현재 시간이 1385964000000(2013년 12월 2일 0:00)인 경우 is_expired(alphabet)를 호출하면 현재 시간이 알파벳 키의 만료 시간보다 길기 때문에 True가 반환됩니다.

추천 학습:

Redis 비디오 튜토리얼

위 내용은 Redis의 생존 및 만료 시간 설정 원리 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제