亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Redis > 正文

Redis中鍵值過期操作示例詳解

2020-10-28 21:28:44
字體:
來源:轉載
供稿:網友

1.過期設置

Redis 中設置過期時間主要通過以下四種方式:

  • expire key seconds:設置 key 在 n 秒后過期;
  • pexpire key milliseconds:設置 key 在 n 毫秒后過期;
  • expireat key timestamp:設置 key 在某個時間戳(精確到秒)之后過期;
  • pexpireat key millisecondsTimestamp:設置 key 在某個時間戳(精確到毫秒)之后過期;

下面分別來看以上這些命令的具體實現。

1)expire:N 秒后過期

127.0.0.1:6379> set key valueOK127.0.0.1:6379> expire key 100(integer) 1127.0.0.1:6379> ttl key(integer) 97

其中命令 ttl 的全稱是 Time To Live 表示此鍵值在 n 秒后過期。例如,上面的結果 97 表示 key 在 97s 后過期。

2)pexpire:N 毫秒后過期

127.0.0.1:6379> set key2 value2OK127.0.0.1:6379> pexpire key2 100000(integer) 1127.0.0.1:6379> pttl key2(integer) 94524

其中 pexpire key2 100000 表示設置 key2 在 100000 毫秒(100秒)后過期。

3)expireat:過期時間戳精確到秒

127.0.0.1:6379> set key3 value3OK127.0.0.1:6379> expireat key3 1573472683(integer) 1127.0.0.1:6379> ttl key3(integer) 67

其中 expireat key3 1573472683 表示 key3 在時間戳 1573472683 后過期(精確到秒),使用 ttl 查詢可以發現在 67s 后 key3 會過期。

小貼士:在 Redis 可以使用 time 命令查詢當前時間的時間戳(精確到秒),示例如下:
127.0.0.1:6379> time
1) "1573472563"
2) "248426"

4)pexpireat:過期時間戳精確到毫秒

127.0.0.1:6379> set key4 value4OK127.0.0.1:6379> pexpireat key4 1573472683000(integer) 1127.0.0.1:6379> pttl key4(integer) 3522

其中 pexpireat key4 1573472683000 表示 key4 在時間戳 1573472683000 后過期(精確到毫秒),使用 ttl 查詢可以發現在 3522ms 后 key4 會過期。

5)字符串中的過期操作

字符串中幾個直接操作過期時間的方法,如下列表:

  • set key value ex seconds:設置鍵值對的同時指定過期時間(精確到秒);
  • set key value ex milliseconds:設置鍵值對的同時指定過期時間(精確到毫秒);
  • setex key seconds valule:設置鍵值對的同時指定過期時間(精確到秒)。

實現示例如下:

① set key value ex seconds

127.0.0.1:6379> set k v ex 100OK127.0.0.1:6379> ttl k(integer) 97

② set key value ex milliseconds

127.0.0.1:6379> set k2 v2 px 100000OK127.0.0.1:6379> pttl k2(integer) 92483

③ setex key seconds valule

127.0.0.1:6379> setex k3 100 v3OK127.0.0.1:6379> ttl k3(integer) 91

2.移除過期時間

使用命令: persist key 可以移除鍵值的過期時間,如下代碼所示:

127.0.0.1:6379> ttl k3(integer) 97127.0.0.1:6379> persist k3(integer) 1127.0.0.1:6379> ttl k3(integer) -1

可以看出第一次使用 ttl 查詢 k3 會在 97s 后過期,當使用了 persist 命令之后,在查詢 k3 的存活時間發現結果是 -1,它表示 k3 永不過期。

3.Java實現過期操作

本文將使用 Jedis 框架來實現對 Redis 過期時間的操作,如下代碼所示:

public class TTLTest { public static void main(String[] args) throws InterruptedException { // 創建 Redis 連接 Jedis jedis = new Jedis("xxx.xxx.xxx.xxx", 6379); // 設置 Redis 密碼(如果沒有密碼,此行可省略) jedis.auth("xxx"); // 存儲鍵值對(默認情況下永不過期) jedis.set("k", "v"); // 查詢 TTL(過期時間) Long ttl = jedis.ttl("k"); // 打印過期日志 System.out.println("過期時間:" + ttl); // 設置 100s 后過期 jedis.expire("k", 100); // 等待 1s 后執行 Thread.sleep(1000); // 打印過期日志 System.out.println("執行 expire 后的 TTL=" + jedis.ttl("k")); }}

程序的執行結果為:

過期時間:-1
執行 expire 后的 TTL=99

可以看出使用 Jedis 來操作 Redis 的過期時間還是很方便的,可直接使用 jedis.ttl("k") 查詢鍵值的生存時間,使用 jedis.expire("k",seconds) 方法設置過期時間(精確到秒)。

小貼士:使用 Jedis 之前,先要把 Jedis 引入到程序中,如果使用的是 Maven 項目的,直接在 pom.xml 文件中添加以下引用:

<!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>version</version></dependency>

更多過期操作方法,如下列表:

  • pexpire(String key, long milliseconds):設置 n 毫秒后過期;
  • expireAt(String key, long unixTime):設置某個時間戳后過期(精確到秒);
  • pexpireAt(String key, long millisecondsTimestamp):設置某個時間戳后過期(精確到毫秒);
  • persist(String key):移除過期時間。

完整示例代碼如下:

public class TTLTest { public static void main(String[] args) throws InterruptedException { // 創建 Redis 連接 Jedis jedis = new Jedis("xxx.xxx.xxx.xxx", 6379); // 設置 Redis 密碼(如果沒有密碼,此行可省略) jedis.auth("xxx"); // 存儲鍵值對(默認情況下永不過期) jedis.set("k", "v"); // 查詢 TTL(過期時間) Long ttl = jedis.ttl("k"); // 打印過期日志 System.out.println("過期時間:" + ttl); // 設置 100s 后過期 jedis.expire("k", 100); // 等待 1s 后執行 Thread.sleep(1000); // 打印過期日志 System.out.println("執行 expire 后的 TTL=" + jedis.ttl("k")); // 設置 n 毫秒后過期 jedis.pexpire("k", 100000); // 設置某個時間戳后過期(精確到秒) jedis.expireAt("k", 1573468990); // 設置某個時間戳后過期(精確到毫秒) jedis.pexpireAt("k", 1573468990000L); // 移除過期時間 jedis.persist("k"); }}

4.持久化中的過期鍵

上面我們講了過期鍵在 Redis 正常運行中一些使用案例,接下來,我們來看 Redis 在持久化的過程中是如何處理過期鍵的。

Redis 持久化文件有兩種格式:RDB(Redis Database)和 AOF(Append Only File),下面我們分別來看過期鍵在這兩種格式中的呈現狀態。

1)RDB中的過期鍵

RDB 文件分為兩個階段,RDB 文件生成階段和加載階段。

① RDB 文件生成

從內存狀態持久化成 RDB(文件)的時候,會對 key 進行過期檢查,過期的鍵不會被保存到新的 RDB 文件中,因此 Redis 中的過期鍵不會對生成新 RDB 文件產生任何影響。

② RDB 文件加載

RDB 加載分為以下兩種情況:

  • 如果 Redis 是主服務器運行模式的話,在載入 RDB 文件時,程序會對文件中保存的鍵進行檢查,過期鍵不會被載入到數據庫中。所以過期鍵不會對載入 RDB 文件的主服務器造成影響;
  • 如果 Redis 是從服務器運行模式的話,在載入 RDB 文件時,不論鍵是否過期都會被載入到數據庫中。但由于主從服務器在進行數據同步時,從服務器的數據會被清空。所以一般來說,過期鍵對載入 RDB 文件的從服務器也不會造成影響。

RDB 文件加載的源碼可以在 rdb.c 文件的 rdbLoad() 函數中找到,源碼所示:

/* Check if the key already expired. This function is used when loading* an RDB file from disk, either at startup, or when an RDB was* received from the master. In the latter case, the master is* responsible for key expiry. If we would expire keys here, the* snapshot taken by the master may not be reflected on the slave. ** 如果服務器為主節點的話,* 那么在鍵已經過期的時候,不再將它們關聯到數據庫中去*/if (server.masterhost == NULL && expiretime != -1 && expiretime < now) { decrRefCount(key); decrRefCount(val); // 跳過 continue;}

2)AOF中的過期鍵

① AOF 文件寫入

當 Redis 以 AOF 模式持久化時,如果數據庫某個過期鍵還沒被刪除,那么 AOF 文件會保留此過期鍵,當此過期鍵被刪除后,Redis 會向 AOF 文件追加一條 DEL 命令來顯式地刪除該鍵值。

② AOF 重寫

執行 AOF 重寫時,會對 Redis 中的鍵值對進行檢查已過期的鍵不會被保存到重寫后的 AOF 文件中,因此不會對 AOF 重寫造成任何影響。

5.主從庫的過期鍵

當 Redis 運行在主從模式下時,從庫不會進行過期掃描,從庫對過期的處理是被動的。也就是即時從庫中的 key 過期了,如果有客戶端訪問從庫時,依然可以得到 key 對應的值,像未過期的鍵值對一樣返回。

從庫的過期鍵處理依靠主服務器控制,主庫在 key 到期時,會在 AOF 文件里增加一條 del 指令,同步到所有的從庫,從庫通過執行這條 del 指令來刪除過期的 key。

6.小結

本文我們知道了 Redis 中的四種設置過期時間的方式:expire、pexpire、expireat、pexpireat,其中比較常用的是 expire 設置鍵值 n 秒后過期。

字符串中可以在添加鍵值的同時設置過期時間,并可以使用 persist 命令移除過期時間。同時我們也知道了過期鍵在 RDB 寫入和 AOF 重寫時都不會被記錄。

過期鍵在主從模式下,從庫對過期鍵的處理要完全依靠主庫,主庫刪除過期鍵之后會發送 del 命令給所有的從庫。

本文的知識點,如下圖所示:

7.引用&鳴謝

http://www.49028c.com/article/174204.htm

http://www.49028c.com/article/174207.htm

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美在线看| 91po在线观看91精品国产性色| 国产成人小视频在线观看| 91sa在线看| 欧美日韩国产区| 成人美女免费网站视频| 国自产精品手机在线观看视频| 久久精品国产免费观看| 国产精品吊钟奶在线| 日韩av电影在线网| 57pao成人国产永久免费| 亚洲一区二区三区xxx视频| 欧美日韩一二三四五区| 欧洲成人午夜免费大片| 狠狠综合久久av一区二区小说| 久久久久中文字幕2018| 2019亚洲日韩新视频| 国产精品毛片a∨一区二区三区|国| 欧美性色19p| 91日本在线视频| 欧美一区二区三区艳史| 久久久久久网址| 久久久91精品国产| 日韩精品一二三四区| 91精品视频大全| 久国内精品在线| 欧美日韩美女在线| 日韩av理论片| 久久频这里精品99香蕉| 色偷偷av一区二区三区乱| 日韩在线观看免费网站| 亚洲第一视频网| 久久亚洲国产精品| 91中文精品字幕在线视频| 欧美日韩激情网| 国产一区二区三区在线免费观看| 国产精品444| 欧美一级大片视频| 中日韩美女免费视频网站在线观看| 福利一区视频在线观看| 国产精品视频免费观看www| 国产精品入口免费视频一| 欧美黄色免费网站| 国产精品一二三在线| 欧美中文字幕在线观看| 国内精品一区二区三区| 狠狠色噜噜狠狠狠狠97| 91av在线网站| 国产精品久久久91| 国产精品视频资源| 亚洲男人天堂视频| 91亚洲国产成人精品性色| 色偷偷av亚洲男人的天堂| 国产日韩精品在线播放| 久久97精品久久久久久久不卡| 91在线中文字幕| 成人免费大片黄在线播放| 日韩大片在线观看视频| 国产综合香蕉五月婷在线| 国产日本欧美视频| zzijzzij亚洲日本成熟少妇| 久久久爽爽爽美女图片| 91色琪琪电影亚洲精品久久| 久久伊人91精品综合网站| 日韩高清不卡av| 亚洲成人网在线观看| 成人在线视频网| 一区二区三区四区视频| 欧美综合一区第一页| 久久久久久久久久久国产| 66m—66摸成人免费视频| 欧美激情手机在线视频| 久久综合免费视频影院| 欧美老少做受xxxx高潮| 日韩精品在线观看一区二区| 国产在线a不卡| 亚洲福利视频免费观看| 国产欧美日韩免费看aⅴ视频| 成人做爰www免费看视频网站| 亚洲国产精久久久久久| 久久久久久久一区二区三区| 亚洲偷欧美偷国内偷| 欧美精品激情视频| 欧美激情视频网址| 日日骚久久av| 久久全球大尺度高清视频| 91国偷自产一区二区三区的观看方式| 久久久精品欧美| 琪琪亚洲精品午夜在线| 中文国产成人精品久久一| 成人啪啪免费看| 欧美最猛性xxxxx免费| 一本一本久久a久久精品综合小说| 成人在线国产精品| 在线国产精品播放| 国产精品av在线播放| 欧美一级片在线播放| 日韩在线播放av| 欧美理论电影在线观看| 日韩精品视频在线播放| 欧洲亚洲免费在线| 亚洲精品在线看| 久久影视三级福利片| 最近2019好看的中文字幕免费| 亚洲美女在线看| 精品自在线视频| 国产精品中文字幕久久久| 日韩激情在线视频| 久久久久国色av免费观看性色| 疯狂欧美牲乱大交777| 欧美高清在线视频观看不卡| 97视频在线观看播放| 亚洲第一精品久久忘忧草社区| 欧美黑人巨大xxx极品| 68精品国产免费久久久久久婷婷| 亚洲欧洲一区二区三区在线观看| 色婷婷综合久久久久中文字幕1| 欧美精品福利视频| 亚洲在线免费观看| 国产欧美va欧美va香蕉在| 日韩精品在线播放| 51视频国产精品一区二区| 中文字幕无线精品亚洲乱码一区| 久久精品在线播放| 国产精品96久久久久久又黄又硬| 国产精品久久久久77777| 久久久久久999| 日韩av电影手机在线| 欧美在线视频免费播放| 国产精品永久免费视频| 这里只有精品在线播放| 欧美激情在线观看| 欧美成人在线网站| 欧美精品中文字幕一区| 91精品久久久久久久久久| 亚洲成**性毛茸茸| 日韩在线观看免费网站| 亚洲欧美日韩中文视频| 91精品国产综合久久香蕉| 最近2019中文字幕一页二页| 国产成+人+综合+亚洲欧美丁香花| 国产亚洲一区二区在线| 91在线观看免费高清完整版在线观看| 亚洲精品久久久久久下一站| 亚洲va码欧洲m码| 亚洲一区中文字幕在线观看| 亚洲午夜激情免费视频| 国产成人免费av电影| 国产精品白丝jk喷水视频一区| 国产z一区二区三区| 精品色蜜蜜精品视频在线观看| 欧美激情亚洲视频| 欧美视频专区一二在线观看| 欧美精品亚州精品| 亚洲精品国产综合区久久久久久久| 日韩成人激情视频| 自拍偷拍亚洲一区| 国产做受69高潮| 欧美亚洲在线播放| 中文国产成人精品| 欧美日韩在线视频观看| 久久久久久久网站| 北条麻妃久久精品| 久久99热精品这里久久精品|