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

本篇博客是Redis系列的第6篇,主要講解以下內容:

  1. 數據庫數量
  2. 切換目標數據庫
  3. 設置鍵的過期時間
  4. 移除鍵的過期時間

本系列的前5篇可以點擊以下鏈接查看:

Redis系列(一):Redis簡介及環境安裝

Redis系列(二):Redis的5種數據結構及其常用命令

Redis系列(三):Redis的持久化機制(RDB、AOF)

Redis系列(四):Redis的複製機制(主從複製)

Redis系列(五):Redis的過期鍵刪除策略

1. 數據庫數量

默認情況下,Redis服務器有16個數據庫,分別為db0~db15,如下圖所示:

該數量是由配置文件中的databases選項決定的,默認值為16:

2. 切換目標數據庫

默認情況下,我們執行的命令的目標數據庫是db0,比如我們執行如下命令:

set message "Hello,Redis"

這個鍵值對會保存在數據庫db0里,如下圖所示:

如果想要切換目標數據庫,可以使用SELECT命令,比如切換到db1,可以執行如下命令:

SELECT 1

然後執行如下圖所示的命令:

此時該鍵值對會保存在db1里,如下圖所示:

在實際使用時,建議遵循以下規範:

  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。

3.2 PTTL

PTTLTTL類似,也是用來查看某個key的剩餘生存時間,但單位為毫秒。

如果key沒有設置過期時間,返回-1。

如果key不存在,返回-2。

3.3 EXPIRE

EXPIRE命令用來給指定的key設置過期時間,單位為秒。

如果過期時間設置成功,返回1。

如果key不存在,返回0。

3.4 PEXPIRE

PEXPIREEXPIRE類似,也是用來給指定的key設置過期時間,但單位為毫秒。

如果過期時間設置成功,返回1。

如果key不存在,返回0。

3.5 EXPIREAT

EXPIREAT命令用來給指定的key設置過期時間,但指定的是某個時間點秒數的UNIX時間戳。

如果過期時間設置成功,返回1。

如果key不存在,返回0。

可以使用如下Java代碼獲取秒數的時間戳:

System.out.println(LocalDateTime.now().plusMinutes(2).toEpochSecond(ZoneOffset.ofHours(8)));

3.6 PEXPIREAT

PEXPIREATEXPIREAT類似,用來給指定的key設置過期時間,但指定的是點毫秒數的UNIX時間戳。

如果過期時間設置成功,返回1。

如果key不存在,返回0。

可以使用如下Java代碼獲取毫秒數的時間戳:

System.out.println(System.currentTimeMillis());

System.out.println(LocalDateTime.now().plusMinutes(2).toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

3.7 PERSIST

PERSIST命令用來移除指定key的過期時間。

如果過期時間移除成功,返回1。

如果key不存在或者key沒有設置過期時間,返回0。

4. 源碼及參考

黃健宏 《Redis設計與實現》

//redis.io/commands

我是一名奮鬥在上海的程序員,如果有興趣,歡迎添加我的個人微信(個人主頁上有我的微信),一起交個朋友。

Tags: