## 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專題五:持久化