Redis는 키의 생존 시간을 제공합니다. 생존 시간을 지정하지 않으면 생존 시간은 영구적입니다. Redis는 시간이 만료된 후 이 키를 자동으로 삭제합니다. EXPIRE 명령을 사용할 수 있으며 시간 단위는 초입니다. 키의 수명이 제한되어 있으면 SET 키가 다시 할당되면 다시 영구 설정됩니다.
SET session:captcha sd2a EXPIRE session:captcha 600
수명을 취소하고 수명을 변경하세요. 키가 영구로 설정됨(PERSIST):
PERSIST session:captcha
TTL 명령을 사용하여 키의 생존 시간을 확인합니다. -1은 만료 후 영구 또는 삭제됨을 의미합니다.
TTL session:captcha
Redis의 INCR, LPUSH, HSET, ZREM 및 기타 명령 중에는 생존 시간이 변경되지 않습니다.
(추천: redis 동영상 튜토리얼)
시간을 밀리미터 단위까지 정확하게 제어하고 싶다면 PEXPIRE가 필요하며, 남은 시간을 확인하려면 PTTL을 사용하세요.
만료 시간이 몇 초인지가 아니라 만료 시간을 부여하고 싶다면 어떻게 해야 하나요? EXPIREAT와 PEXPIREAT가 필요합니다. EXPIREAT의 매개변수는 만료 타임스탬프(초)이고, PEXPIREAT의 매개변수는 타임스탬프의 만료 시간(밀리초)입니다.
SET session:captcha sd2a EXPIREAT session:captcha 1399902009 PEXPIREAT session:captcha 1399902009000
응용 시나리오 1: 액세스 빈도 제한: 각 사용자가 분당 10개 항목만 탐색하도록 제한합니다. . 의사 코드는 다음과 같습니다.
$isExists = EXISTS limit:user1:192.168.1.2 if($isExists){ $num = INCR limit:user1:192.168.1.2 if($num > 10){ print '超过限制' exit } }else{ MULTI INCR limit:user1:192.168.1.2 EXPIRE limit:user1:192.168.1.2 60 EXEC }
트랜잭션을 사용하는 이유는 INCR Limit:user1:192.168.1.2를 실행한 후 EXPIRE Limit:user1:192.168.1.2 60을 실행하기 전에 클라이언트가 닫히기 때문입니다. 그러면 키와 값이 유지됩니다. 그리고 이 아이디는 평생 10번만 접속이 가능합니다. 안됐네요.
애플리케이션 시나리오 2: 캐싱을 구현합니다. 10,000명의 사용자에 대한 순위를 계산하는 것은 리소스 집약적이므로 1차 계산 후 데이터를 키에 저장한 다음 이 키의 생존 시간을 설정합니다. 1시간이 지나면 생존시간이 만료되고 키는 삭제되며, 새로운 순위가 다시 계산되어 임시키가 저장됩니다. 우리는 의사 코드를 사용하여 다음을 구현합니다.
//战斗排行榜 $rank = GET cache:rank:fight if not $rank $rank = 计算排名() MULTI SET cache:rank:fight $rank EXPIRE cache:rank:fight 3600 EXEC
Redis는 메모리에 저장된 데이터베이스입니다. 메모리가 캐시로 가득 차면 Redis는 구성 파일을 기반으로 특정 캐시를 삭제합니다. 구성 항목은 Redis 구성 파일의 maxmemory 매개 변수이며 단위는 바이트입니다. 이 제한을 초과하면 구성 파일의 maxmemory-policy 매개변수에 따라 불필요한 키가 삭제됩니다. maxmemory-policy의 선택적 규칙은 다음과 같습니다.
1. 휘발성-lru: LRU 알고리즘을 사용하여 키(생존 시간이 설정된 키)를 삭제합니다.
2. allkey-lru: LRU 알고리즘을 사용하여 키를 삭제합니다.
3. 휘발성-임의: 키를 즉시 삭제합니다(수명 기간이 설정된 키).
4. allkey-random: 키를 즉시 삭제합니다.
5. 휘발성-ttl: 수명이 곧 만료되는 키를 삭제합니다. 만료가 임박한 키를 삭제하기 위해 모든 키를 순회하는 것이 아니라, N개의 키를 한번에 꺼낸 후, 만료가 임박한 키를 N개의 키 중에서 삭제하는 것이다. N은 무엇입니까? 구성 파일.
6. Nevication: 삭제하지 말고 오류를 반환합니다.
Redis는 키의 만료 시간을 설정합니다. - EXPIRE 명령
EXPIRE key seconds
은 키가 만료되면(생존 시간이 0) 자동으로 삭제됩니다.
Redis에서는 수명이 있는 키를 "휘발성"이라고 합니다.
DEL 명령을 사용하여 전체 키를 삭제하거나 SET 및 GETSET 명령으로 덮어써서 수명을 제거할 수 있습니다. 즉, 명령이 수명이 있는 키 값만 수정(변경)하는 경우 새로운 키 값을 입력해도 수명은 변경되지 않습니다.
예를 들어 키에 대해 INCR 명령을 실행하거나, 목록에 대해 LPUSH 명령을 실행하거나, 해시 테이블에 대해 HSET 명령을 실행하는 경우 이러한 작업은 키 자체의 생존 시간을 수정하지 않습니다.
반면에 RENAME을 사용하여 키 이름을 바꾸는 경우 이름이 바뀐 키의 생존 시간은 이름 바꾸기 전과 동일합니다.
RENAME 명령의 또 다른 가능성은 수명이 있는 키의 이름을 수명이 있는 another_key로 바꾸는 것입니다. 이때 이전 another_key(및 해당 수명)가 삭제되고 이전 키의 이름이 another_key로 변경됩니다. , 새로운 another_key의 생존 시간은 원래 키와 동일합니다.
키를 삭제하지 않고 키의 수명을 제거하려면 PERSIST 명령을 사용하여 키를 다시 "영구" 키로 만듭니다.
생존 시간 업데이트
이미 생존 시간이 있는 키에 대해 EXPIRE 명령을 실행할 수 있으며, 새로 지정된 생존 시간이 이전 생존 시간을 대체합니다.
만료 시간의 정확성
Redis 2.4 버전에서 만료 시간 지연은 1초 이내입니다. 즉, 키가 만료되더라도 만료 시간에 액세스한 후 여전히 1초 이내일 수 있습니다. 새로운 Redis 2.6 버전에서는 지연 시간이 1밀리초 미만으로 단축되었습니다.
Redis 2.1.3 이전의 차이점
Redis 2.1.3 이전 버전에서는 수명이 있는 키를 수정하면 전체 키가 삭제됩니다. 이 동작은 당시 복제 레이어 제한의 영향을 받습니다. 이제 수정되었습니다. 사용 가능한 버전:
>= 1.0.0
시간 복잡도:
O(1)
반환 값:
设置成功返回 1 。
当 key 不存在或者不能为 key 设置生存时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的生存时间),返回 0 。
redis> SET cache_page "www.google.com" OK redis> EXPIRE cache_page 30 # 设置过期时间为 30 秒 (integer) 1 redis> TTL cache_page # 查看剩余生存时间 (integer) 23 redis> EXPIRE cache_page 30000 # 更新过期时间 (integer) 1 redis> TTL cache_page (integer) 29996
1、在小于2.1.3的redis版本里,只能对key设置一次expire。redis2.1.3和之后的版本里,可以多次对key使用expire命令,更新key的expire time。
2、redis术语里面,把设置了expire time的key 叫做:volatile keys。 意思就是不稳定的key。
3、如果对key使用set或del命令,那么也会移除expire time。尤其是set命令,这个在编写程序的时候需要注意一下。
4、redis2.1.3之前的老版本里,如果对volatile keys 做相关写入操作(LPUSH,LSET),和其他一些触发修改value的操作时,redis会删除 该key。
也就是说 :
redis.expire(key,expiration); redis.lpush(key,field,value); redis.get(key) //return null
redis2.1.3之后的版本里面没有这个约束,可以任意修改。
redis.set(key,100); redis.expire(key,expiration); redis.incr(key) redis.get(key) //redis2.2.2 return 101; redis<2.1.3 return 1;
5、redis对过期键采用了lazy expiration:在访问key的时候判定key是否过期,如果过期,则进行过期处理。其次,每秒对volatile keys 进行抽样测试,如果有过期键,那么对所有过期key进行处理。
更多redis知识请关注redis入门教程栏目。
위 내용은 Redis 생존 시간 설정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!