1. 程式人生 > >Redis系列(六):設定/移除鍵的過期時間

Redis系列(六):設定/移除鍵的過期時間

本篇部落格是Redis系列的第6篇,主要講解以下內容: 1. 資料庫數量 2. 切換目標資料庫 3. 設定鍵的過期時間 4. 移除鍵的過期時間 本系列的前5篇可以點選以下連結檢視: [Redis系列(一):Redis簡介及環境安裝](https://www.cnblogs.com/zwwhnly/p/12185696.html) [Redis系列(二):Redis的5種資料結構及其常用命令](https://www.cnblogs.com/zwwhnly/p/12216550.html) [Redis系列(三):Redis的持久化機制(RDB、AOF)](https://www.cnblogs.com/zwwhnly/p/12295692.html) [Redis系列(四):Redis的複製機制(主從複製)](https://www.cnblogs.com/zwwhnly/p/12651527.html) [Redis系列(五):Redis的過期鍵刪除策略](https://www.cnblogs.com/zwwhnly/p/12689792.html) ## 1. 資料庫數量 預設情況下,Redis伺服器有16個數據庫,分別為db0~db15,如下圖所示: ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_095111.png) 該數量是由配置檔案中的`databases`選項決定的,預設值為16: ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_095637.png) ## 2. 切換目標資料庫 預設情況下,我們執行的命令的目標資料庫是db0,比如我們執行如下命令: ```shell set message "Hello,Redis" ``` 這個鍵值對會儲存在資料庫db0裡,如下圖所示: ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_154340.png) 如果想要切換目標資料庫,可以使用`SELECT`命令,比如切換到db1,可以執行如下命令: ```shell SELECT 1 ``` 然後執行如下圖所示的命令: ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_155701.png) 此時該鍵值對會儲存在db1裡,如下圖所示: ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_155913.png) 在實際使用時,建議遵循以下規範: 1. 各個應用使用不同的目標資料庫 2. 1個應用盡量不要操作多個目標資料庫 ## 3. 設定/移除鍵的過期時間 Redis提供了7個和key的過期時間相關的命令,分別如下所示: 1. TTL 2. PTTL 3. EXPIRE 4. PEXPIRE 5. EXPIREAT 6. PEXPIREAT 7. PERSIST 接下來詳細講解每個命令的使用方法。 ### 3.1 TTL `TTL`是Time To Live的縮寫,用來檢視某個key的剩餘生存時間,單位為秒。 如果key沒有設定過期時間,返回-1。 如果key不存在,返回-2。 ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_170846.png) ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_170733.png) ### 3.2 PTTL `PTTL`和`TTL`類似,也是用來檢視某個key的剩餘生存時間,但單位為毫秒。 如果key沒有設定過期時間,返回-1。 如果key不存在,返回-2。 ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_171617.png) ### 3.3 EXPIRE `EXPIRE`命令用來給指定的key設定過期時間,單位為秒。 如果過期時間設定成功,返回1。 如果key不存在,返回0。 ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_174218.png) ### 3.4 PEXPIRE `PEXPIRE`與`EXPIRE`類似,也是用來給指定的key設定過期時間,但單位為毫秒。 如果過期時間設定成功,返回1。 如果key不存在,返回0。 ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_174909.png) ### 3.5 EXPIREAT `EXPIREAT`命令用來給指定的key設定過期時間,但指定的是某個時間點**秒數**的UNIX時間戳。 如果過期時間設定成功,返回1。 如果key不存在,返回0。 可以使用如下Java程式碼獲取秒數的時間戳: ```java System.out.println(LocalDateTime.now().plusMinutes(2).toEpochSecond(ZoneOffset.ofHours(8))); ``` ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_183235.png) ### 3.6 PEXPIREAT `PEXPIREAT`與`EXPIREAT`類似,用來給指定的key設定過期時間,但指定的是點**毫秒數**的UNIX時間戳。 如果過期時間設定成功,返回1。 如果key不存在,返回0。 可以使用如下Java程式碼獲取毫秒數的時間戳: ``` System.out.println(System.currentTimeMillis()); System.out.println(LocalDateTime.now().plusMinutes(2).toInstant(ZoneOffset.ofHours(8)).toEpochMilli()); ``` ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200506_194343.png) ### 3.7 PERSIST `PERSIST`命令用來移除指定key的過期時間。 如果過期時間移除成功,返回1。 如果key不存在或者key沒有設定過期時間,返回0。 ![](https://images.zwwhnly.com/picture/2020/05/snipaste_20200507_094005.png) ## 4. 原始碼及參考 黃健巨集 《Redis設計與實現》 [https://redis.io/commands](https://redis.io/commands) > 我是一名奮鬥在上海的程式設計師,如果有興趣,歡迎新增我的個人微信(個人主頁上有我的微信),一起交個