婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > Redis中鍵值過期操作示例詳解

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

熱門標(biāo)簽:高碑店市地圖標(biāo)注app 四川穩(wěn)定外呼系統(tǒng)軟件 一個(gè)地圖標(biāo)注多少錢 400電話辦理的口碑 廊坊外呼系統(tǒng)在哪買 臺(tái)灣電銷 地圖標(biāo)注工廠入駐 b2b外呼系統(tǒng) 南京手機(jī)外呼系統(tǒng)廠家

1.過期設(shè)置

Redis 中設(shè)置過期時(shí)間主要通過以下四種方式:

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

下面分別來看以上這些命令的具體實(shí)現(xiàn)。

1)expire:N 秒后過期

127.0.0.1:6379> set key value
OK
127.0.0.1:6379> expire key 100
(integer) 1
127.0.0.1:6379> ttl key
(integer) 97

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

2)pexpire:N 毫秒后過期

127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> pexpire key2 100000
(integer) 1
127.0.0.1:6379> pttl key2
(integer) 94524

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

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

127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> expireat key3 1573472683
(integer) 1
127.0.0.1:6379> ttl key3
(integer) 67

其中 expireat key3 1573472683 表示 key3 在時(shí)間戳 1573472683 后過期(精確到秒),使用 ttl 查詢可以發(fā)現(xiàn)在 67s 后 key3 會(huì)過期。

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

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

127.0.0.1:6379> set key4 value4
OK
127.0.0.1:6379> pexpireat key4 1573472683000
(integer) 1
127.0.0.1:6379> pttl key4
(integer) 3522

其中 pexpireat key4 1573472683000 表示 key4 在時(shí)間戳 1573472683000 后過期(精確到毫秒),使用 ttl 查詢可以發(fā)現(xiàn)在 3522ms 后 key4 會(huì)過期。

5)字符串中的過期操作

字符串中幾個(gè)直接操作過期時(shí)間的方法,如下列表:

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

實(shí)現(xiàn)示例如下:

① set key value ex seconds

127.0.0.1:6379> set k v ex 100
OK
127.0.0.1:6379> ttl k
(integer) 97

② set key value ex milliseconds

127.0.0.1:6379> set k2 v2 px 100000
OK
127.0.0.1:6379> pttl k2
(integer) 92483

③ setex key seconds valule

127.0.0.1:6379> setex k3 100 v3
OK
127.0.0.1:6379> ttl k3
(integer) 91

2.移除過期時(shí)間

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

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

可以看出第一次使用 ttl 查詢 k3 會(huì)在 97s 后過期,當(dāng)使用了 persist 命令之后,在查詢 k3 的存活時(shí)間發(fā)現(xiàn)結(jié)果是 -1,它表示 k3 永不過期。

3.Java實(shí)現(xiàn)過期操作

本文將使用 Jedis 框架來實(shí)現(xiàn)對(duì) Redis 過期時(shí)間的操作,如下代碼所示:

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

程序的執(zhí)行結(jié)果為:

過期時(shí)間:-1
執(zhí)行 expire 后的 TTL=99

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

小貼士:使用 Jedis 之前,先要把 Jedis 引入到程序中,如果使用的是 Maven 項(xiàng)目的,直接在 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):設(shè)置 n 毫秒后過期;
  • expireAt(String key, long unixTime):設(shè)置某個(gè)時(shí)間戳后過期(精確到秒);
  • pexpireAt(String key, long millisecondsTimestamp):設(shè)置某個(gè)時(shí)間戳后過期(精確到毫秒);
  • persist(String key):移除過期時(shí)間。

完整示例代碼如下:

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

4.持久化中的過期鍵

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

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

1)RDB中的過期鍵

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

① RDB 文件生成

從內(nèi)存狀態(tài)持久化成 RDB(文件)的時(shí)候,會(huì)對(duì) key 進(jìn)行過期檢查,過期的鍵不會(huì)被保存到新的 RDB 文件中,因此 Redis 中的過期鍵不會(huì)對(duì)生成新 RDB 文件產(chǎn)生任何影響。

② RDB 文件加載

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

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

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

/* 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. 
*
* 如果服務(wù)器為主節(jié)點(diǎn)的話,
* 那么在鍵已經(jīng)過期的時(shí)候,不再將它們關(guān)聯(lián)到數(shù)據(jù)庫中去
*/
if (server.masterhost == NULL  expiretime != -1  expiretime  now) {
 decrRefCount(key);
 decrRefCount(val);
 // 跳過
 continue;
}

2)AOF中的過期鍵

① AOF 文件寫入

當(dāng) Redis 以 AOF 模式持久化時(shí),如果數(shù)據(jù)庫某個(gè)過期鍵還沒被刪除,那么 AOF 文件會(huì)保留此過期鍵,當(dāng)此過期鍵被刪除后,Redis 會(huì)向 AOF 文件追加一條 DEL 命令來顯式地刪除該鍵值。

② AOF 重寫

執(zhí)行 AOF 重寫時(shí),會(huì)對(duì) Redis 中的鍵值對(duì)進(jìn)行檢查已過期的鍵不會(huì)被保存到重寫后的 AOF 文件中,因此不會(huì)對(duì) AOF 重寫造成任何影響。

5.主從庫的過期鍵

當(dāng) Redis 運(yùn)行在主從模式下時(shí),從庫不會(huì)進(jìn)行過期掃描,從庫對(duì)過期的處理是被動(dòng)的。也就是即時(shí)從庫中的 key 過期了,如果有客戶端訪問從庫時(shí),依然可以得到 key 對(duì)應(yīng)的值,像未過期的鍵值對(duì)一樣返回。

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

6.小結(jié)

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

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

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

本文的知識(shí)點(diǎn),如下圖所示:

7.引用鳴謝

https://www.jb51.net/article/174204.htm

https://www.jb51.net/article/174207.htm

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • Redis使用Eval多個(gè)鍵值自增的操作實(shí)例
  • Redis不使用 keys 命令獲取鍵值信息的方法

標(biāo)簽:甘南 伊春 拉薩 南寧 河源 定州 泰州 畢節(jié)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis中鍵值過期操作示例詳解》,本文關(guān)鍵詞  Redis,中,鍵值,過期,操作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis中鍵值過期操作示例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Redis中鍵值過期操作示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩欧美在线不卡| 日韩欧美国产电影| 欧美精品 日韩| 精品入口麻豆88视频| 中文字幕不卡一区| 亚洲成人免费在线观看| 久久国产尿小便嘘嘘尿| 色哟哟精品一区| 亚洲综合丁香婷婷六月香| 国产成人精品三级| 久久久久久久久久电影| 首页欧美精品中文字幕| 欧美三级在线播放| 日韩电影网1区2区| 欧美裸体一区二区三区| 日韩专区在线视频| 欧美精品一区二区不卡| 国产曰批免费观看久久久| 久久久影视传媒| 久草中文综合在线| 欧美xxxx在线观看| 午夜精品久久久久久久99水蜜桃| 欧美日韩视频不卡| 国产高清久久久| 亚洲欧美一区二区久久| 欧美久久久久久蜜桃| 成人午夜视频网站| 青青国产91久久久久久| 日韩女优毛片在线| 欧美自拍偷拍一区| 久久99久久99精品免视看婷婷| 日韩伦理电影网| 亚洲精品一线二线三线无人区| 国产成人精品1024| 亚洲va韩国va欧美va| 国产精品理伦片| 国产日韩欧美综合在线| 在线观看网站黄不卡| 久久亚洲综合色| 一区二区三区日韩精品视频| 亚洲视频一区在线| 宅男在线国产精品| 在线视频亚洲一区| 国产麻豆精品theporn| 精品亚洲国产成人av制服丝袜| 亚洲综合av网| 亚洲第一久久影院| 五月开心婷婷久久| 午夜久久福利影院| 国产精品一品二品| 亚洲欧美日韩一区二区| 精品福利一区二区三区| wwww国产精品欧美| 国产精品另类一区| 亚洲精品中文在线影院| 亚洲一区二区四区蜜桃| 亚州成人在线电影| 加勒比av一区二区| 精品一区二区在线观看| 国产又黄又大久久| www.欧美.com| 欧美在线一区二区三区| 色狠狠桃花综合| 69成人精品免费视频| 精品福利一二区| 一区二区三区中文在线| 午夜精品爽啪视频| 国产米奇在线777精品观看| 精品无码三级在线观看视频| 国产成a人无v码亚洲福利| 欧美性生活久久| 国产精品色一区二区三区| 一区二区三区高清在线| 国产成人av电影| 欧美精品第一页| 亚洲18女电影在线观看| 成人福利视频在线| 欧美第一区第二区| 99久久精品免费| 久久精品人人做人人爽97| 日本韩国欧美国产| 欧美高清一级片在线观看| 日本不卡视频在线| 欧美一区二区三区在线观看| 一区二区三区在线观看国产| 成人综合在线观看| 中文字幕一区二区三区四区 | 国产精品69毛片高清亚洲| 国产高清一区日本| 日韩精品乱码免费| 久久久国产精品午夜一区ai换脸| 日韩美女啊v在线免费观看| 91麻豆精品国产91久久久更新时间 | 99精品视频中文字幕| 欧美高清在线一区二区| 在线播放/欧美激情| 欧美精选一区二区| 韩国v欧美v亚洲v日本v| 欧美酷刑日本凌虐凌虐| 久久精品国内一区二区三区| 欧美成人福利视频| 丁香啪啪综合成人亚洲小说 | 视频精品一区二区| 日韩情涩欧美日韩视频| 亚洲日本va午夜在线影院| 成人国产在线观看| 亚洲亚洲精品在线观看| 精品欧美乱码久久久久久1区2区| av在线一区二区| 亚洲日本免费电影| 欧美亚洲综合一区| 本田岬高潮一区二区三区| 樱桃视频在线观看一区| 欧美国产精品中文字幕| 久久美女高清视频| 91精品一区二区三区久久久久久| 在线一区二区三区四区五区| 国产裸体歌舞团一区二区| 麻豆免费看一区二区三区| 国产精品丝袜一区| 国产亚洲精品福利| 中文成人av在线| 91精品国产福利| 日韩精品资源二区在线| 精品日韩99亚洲| 中文字幕精品一区二区精品绿巨人| 精品久久久久一区| 国产亚洲综合色| 一区二区三区精品视频| 亚洲成人激情自拍| 天堂一区二区在线| 国产一区二区三区久久悠悠色av| 国产永久精品大片wwwapp| 成人国产精品免费网站| 国产一区二区不卡| 欧美日韩电影在线播放| 久久午夜电影网| 日韩欧美色电影| 亚洲一区在线观看免费| 国产亚洲一本大道中文在线| 成人黄色av网站在线| 天天亚洲美女在线视频| 99久久精品国产一区二区三区| 免费成人在线网站| 国产成人在线视频网址| 色婷婷av一区二区| 在线电影欧美成精品| 一区二区三区在线观看国产| 高清日韩电视剧大全免费| av亚洲精华国产精华| 精品国产免费久久| 五月天亚洲婷婷| 9191国产精品| 一级中文字幕一区二区| 色婷婷综合激情| 一区二区三区精品在线观看| 色呦呦一区二区三区| 777久久久精品| 性做久久久久久久免费看| 91久久免费观看| 调教+趴+乳夹+国产+精品| 欧美日韩精品欧美日韩精品一| 亚洲不卡av一区二区三区| 色哟哟在线观看一区二区三区| 国产精品视频一二三区| 成人午夜av电影| 亚洲一区二区三区四区在线| 99久久免费视频.com| 亚洲影院理伦片| 欧美成人官网二区| 国产高清精品网站| 亚洲激情网站免费观看| 91国偷自产一区二区使用方法| 国产精品免费视频网站| 欧美日韩高清不卡| 成人爱爱电影网址| 2023国产精品| 成人激情开心网| 日韩精品一区第一页| 亚洲国产精品成人综合色在线婷婷 | 全国精品久久少妇| 日韩欧美一级二级| 99国产精品一区| 日韩精品91亚洲二区在线观看| 精品国产91洋老外米糕| 91精品在线免费| 色婷婷久久久亚洲一区二区三区| 国产一区二区三区免费播放| 一区二区三区精品在线观看| 在线观看日韩精品| 成人app网站| 国产精品77777| 国内成人自拍视频| 蜜桃视频一区二区三区| 一区二区三区精密机械公司| 亚洲成人黄色小说| 樱桃国产成人精品视频| 日韩和欧美一区二区| 亚洲黄色av一区| 亚洲精品一卡二卡|