## Redis专题三:key的过期
[TOC]
> 当timeout时间到期时,key会被redis自动删除,新建key默认是永远不会过期的
### timeout相关命令
| 命令 | 解释 | 返回值 |
| --- | --- | --- |
| `EXPIRE key second`| 为key设置timeout,单位为秒 |1表示timeout设置成功<br>0表示key不存在|
| `EXPIRE key milliseconds`| 为key设置timeout,单位为毫秒 |1表示timeout设置成功<br>0表示key不存在|
| `TTL key`| key还有多少秒超时 |-2表示key不存在<br>-1表示key存在且没有过期<br>其它非负值表示过期的剩余秒数|
| `PTTL key`| key还有多少毫秒超时 |-2表示key不存在<br>-1表示key存在且没有过期<br>其它非负值表示过期的剩余毫秒数|
| `EXPIREAT key second_timestamp`| 设置key在未来的一个时刻过期,值为从`1970-1-1`到指定未来时间的时间间隔,单位为秒 |1表示timeout设置成功<br>0表示key不存在|
| `PEXPIREAT key milliseconds_timestamp`| 设置key在未来的一个时刻过期,值为从`1970-1-1`到指定未来时间的时间间隔,单位为毫秒 |1表示timeout设置成功<br>0表示key不存在|
| `PERSIST key`| 移除timeout,设置key永远不过期|1表示timeout被移除<br>0表示key不存在或者没有明确的timout,如默认新建的key`SET connections 10`|
| `EXISTS key`| 判断key是否存在|1表示key存在<br>0表示key不存在|
| `DEL key [key ...]`| 删除key,如果key不存在,会被忽略|返回成功删除key的个数|
| `RENAME key_source key_dest`| 将key_source重命名为key_dest,重命名成功的话key_source会被删除|返回`OK`|
| `RENAMENX key_source key_dest`| 将key_source重命名为key_dest|1表示重命名成功<br>0表示key存在|
### timeout改变条件
- 删除、修改key(`SET` `DEL` `GETSET`等)都会导致timeout被清除
~~~
> SET connections 10
OK
> EXPIRE connections 30
(integer) 1
> TTL connections
(integer) 26
> DEL connections
(integer) 1
> TTL connections
(integer) -2
~~~
- 对key的内容改变(`INCR` `LPUSH` 等)不会导致timeout被清除
~~~
> SET connections 10
OK
> EXPIRE connections 30
(integer) 1
> TTL connections
(integer) 27
> INCR connections
(integer) 11
> TTL connections
(integer) 16
~~~
- 使用`PERSIST`设置永不过期,会导致timeout被清除
~~~
> SET connections 10
OK
> EXPIRE connections 30
(integer) 1
> TTL connections
(integer) 28
> PERSIST connections
(integer) 1
> TTL connections
(integer) -1
~~~
- 使用`RENAME key_source key_dest` key_source的timeout会被继承到key_dest
~~~
> SET connections 10
OK
> EXPIRE connections 30
(integer) 1
> RENAME connections conn
OK
> TTL conn
(integer) 13
~~~
- 使用`EXPIRE` 设置timeout为负数时,会导致key立即被删除
~~~
> SET connections 10
OK
> EXPIRE connections -1
(integer) 1
> EXISTS connections
(integer) 0
~~~
- JavaCook
- Java专题零:类的继承
- Java专题一:数据类型
- Java专题二:相等与比较
- Java专题三:集合
- Java专题四:异常
- Java专题五:遍历与迭代
- Java专题六:运算符
- Java专题七:正则表达式
- Java专题八:泛型
- Java专题九:反射
- Java专题九(1):反射
- Java专题九(2):动态代理
- Java专题十:日期与时间
- Java专题十一:IO与NIO
- Java专题十一(1):IO
- Java专题十一(2):NIO
- Java专题十二:网络
- Java专题十三:并发编程
- Java专题十三(1):线程与线程池
- Java专题十三(2):线程安全与同步
- Java专题十三(3):内存模型、volatile、ThreadLocal
- Java专题十四:JDBC
- Java专题十五:日志
- Java专题十六:定时任务
- Java专题十七:JavaMail
- Java专题十八:注解
- Java专题十九:浅拷贝与深拷贝
- Java专题二十:设计模式
- Java专题二十一:序列化与反序列化
- 附加专题一:MySQL
- MySQL专题零:简介
- MySQL专题一:安装与连接
- MySQL专题二:DDL与DML语法
- MySQL专题三:工作原理
- MySQL专题四:InnoDB存储引擎
- MySQL专题五:sql优化
- MySQL专题六:数据类型
- 附加专题二:Mybatis
- Mybatis专题零:简介
- Mybatis专题一:配置文件
- Mybatis专题二:映射文件
- Mybatis专题三:动态SQL
- Mybatis专题四:源码解析
- 附加专题三:Web编程
- Web专题零:HTTP协议
- Web专题一:Servlet
- Web专题二:Cookie与Session
- 附加专题四:Redis
- Redis专题一:数据类型
- Redis专题二:事务
- Redis专题三:key的过期
- Redis专题四:消息队列
- Redis专题五:持久化