>데이터 베이스 >Redis >Redis 만료 시간 문제를 해결하는 방법

Redis 만료 시간 문제를 해결하는 방법

王林
王林앞으로
2023-05-27 16:49:192207검색

1. Redis의 문자열 만료 키가 처음 설정되었을 때 삭제 시간을 계속 유지하기 위해 여러 번 수정되었는지 확인하는 방법은 무엇입니까?

문자열을 수정하는 경우 redis에는 set, setex,append, incr, decr이 있습니다. 등 중 set 및 setex를 사용하여 기존 문자열을 수정하면 원래 설정된 만료 시간이 재설정됩니다. 엄밀히 말하면 set 및 setex는 "수정"이 아니라 덮어쓰기이므로 원래 설정된 키-값을 설정해야 합니다. 다시 setexed하면 이 키가 원래 키를 덮어씁니다. try redis를 사용한 테스트 결과는 다음과 같습니다.

Redis 만료 시간 문제를 해결하는 방법

append, incr, decr 및 기타 명령을 사용하여 수정하면 원래 만료 시간이 재설정되지 않습니다.

Redis 만료 시간 문제를 해결하는 방법

따라서 문자열 구조의 경우, set /setex 명령을 수행하면 만료 시간이 재설정되고, set 명령은 만료 시간이 만료되지 않도록 직접 변경합니다.
예를 들어 {key1:value}를 7:00에 설정하면 만료 시간은 30분이고, 이 키의 값을 7:00에서 7:30 사이에 여러 번 설정/설정하면 만료 시간은 key1은 재설정됩니다. 7시 30분에 만료되지 않습니다. 이 만료 키를 설정한 후 만료 시간이 매번 새로 고쳐지지 않고 만료 시간이 7시 30분에 안정적으로 유지되도록 하는 방법은 무엇입니까?

방법 1:

Timer를 사용하여 처음 설정할 때 타이머를 생성하고 만료되면 키를 삭제하세요. 이 방법은 데이터 양이 많을 때 더 많은 CPU 리소스를 차지하므로 권장되지 않습니다.

방법 2:

키 값을 설정하기 전 매번 이때 키의 남은 만료 시간을 반환하고, setex 중 남은 만료 시간을 키에 새로운 만료 시간으로 할당하면 해결 가능한 문제 .

Spring 프로젝트를 예로 들면, redisTemplate.getExpire(String key) 메소드에서 반환한 남은 만료 타임스탬프(밀리초 수준)를 사용하면 문제를 해결할 수 있습니다. 기본적으로 PTTL 명령을 redis로 보내 나머지를 반환합니다. 밀리초 단위로 키가 만료됩니다.

Redis 만료 시간 문제를 해결하는 방법

코드 예:

key1이 수정될 때마다 처음 설정된 만료 시간을 유지하도록 합니다.

//获取key1的剩余时间的时间戳
Long expire = redisTemplate.getExpire("key1");
//最后一个参数可以选秒、毫秒(TimeUnit.MILLISECONDS),Redis最多只能返回毫秒级别的key的剩余过期时间
redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);

2 해시, 세트, ​​Zset 및 목록의 값을 수정하면 만료가 재설정됩니다. 시간?

문자열 형식의 K-V 유효 기간은 값 값이 수정됨에 따라 재설정됩니다.

K-V가 있는 경우 만료 시간은 30초입니다. 값 값이 수정되면 만료 시간이 30초로 재설정됩니다. 원래 설정된 시간에서 손실된 시간을 빼는 대신 30초.

문자열 데이터 구조를 제외하고 다른 데이터 구조를 수정해도 만료 시간이 재설정되지 않습니다.

예: hash, set, Zset, list 등:

해시를 예로 들어:

해시의 유효기간은 재설정되지 않습니다. 해시 필드 값이 수정됨에 따라 타이밍이 다시 시작됩니다.
시간을 다시 지정해야 하는 경우 필드 값 수정 시 유효 기간을 다시 지정해야 합니다.

Redis 만료 시간 문제를 해결하는 방법

위 내용은 Redis 만료 시간 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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