추천 학습: Redis 비디오 튜토리얼
EXPIRE 명령 또는 PEXPIRE 명령을 통해 클라이언트는 특정 키에 대한 생존을 설정할 수 있습니다. 초 또는 밀리초 정밀도의 데이터베이스 지정된 시간(초 또는 밀리초)이 지나면 서버는 자동으로 수명이 0인 키를 삭제합니다.
SETEX 명령은 문자열 키를 설정하는 동안 키의 만료 시간을 설정할 수 있습니다(문자열 키에만 사용할 수 있음)
EXPIRE 명령 및 PEXPIRE 명령과 유사하게 클라이언트는 EXPIREAT 명령 또는 PEXPIREAT 명령을 사용할 수 있습니다. , 데이터베이스의 키 만료 시간을 초 또는 밀리초 단위로 설정하세요
만료 시간은 UNIX 타임스탬프입니다. 키 만료 시간이 오면 서버가 자동으로 데이터베이스에서 키를 삭제합니다
TTL 명령 PTTL 명령은 수명 또는 만료 시간이 있는 키를 승인하고 키의 남은 수명, 즉 키가 서버에 의해 자동으로 삭제되기까지 걸리는 시간을 반환합니다.
Redis에는 4개의 키가 있습니다. Different 명령을 사용하여 키의 수명(키가 존재할 수 있는 기간) 또는 만료 시간(키가 삭제되는 시점)을 설정할 수 있습니다.
설정 명령에는 다양한 단위와 형태가 있지만 실제로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!