1 设置带过期时间的 key
# 时间复杂度:O(1),最常用方式
expire key seconds
# 字符串独有方式
setex(String key, int seconds, String value)
除了string独有设置过期时间的方法,其他类型都需依靠expire方法设置时间,若:
- 未设置时间,则缓存永不过期
- 设置过期时间,但之后又想让缓存永不过期,使用persist
设置key的过期时间。超时后,将会自动删除该key。在Redis的术语中一个key的相关超时是volatile的。
生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆写(overwrite)。这意味着,如果一个命令只是修改(alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替(replace)它的话,那么生存时间不会被改变。 如使用 INCR 递增key的值,执行 LPUSH 将新值推到 list 中或用 HSET 改变hash的field,这些操作都使超时保持不变。
- 使用 PERSIST 命令可以清除超时,使其变成一个永久key
- 若 key 被 RENAME 命令修改,相关的超时时间会转移到新key
- 若 key 被 RENAME 命令修改,比如原来就存在 Key_A,然后调用 RENAME Key_B Key_A 命令,这时不管原来 Key_A 是永久的还是设为超时的,都会由Key_B的有效期状态覆盖
注意,使用非正超时调用 EXPIRE/PEXPIRE 或具有过去时间的 EXPIREAT/PEXPIREAT 将导致key被删除而不是过期(因此,发出的key事件将是 del,而不是过期)。
1.1 刷新过期时间
对已经有过期时间的key执行EXPIRE操作,将会更新它的过期时间。有很多应用有这种业务场景,例如记录会话的session。
1.2 Redis 之前的 2.1.3 的差异
在 Redis 版本之前 2.1.3 中,使用更改其值的命令更改具有过期集的密钥具有完全删除key的效果。由于现在修复的复制层中存在限制,因此需要此语义。
EXPIRE 将返回 0,并且不会更改具有超时集的键的超时。
1.3 返回值
- 1,如果成功设置过期时间。
- 0,如果key不存在或者不能设置过期时间。
1.4 示例
假设有一 Web 服务,对用户最近访问的最