最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

大家都應(yīng)該知道的Redis過(guò)期鍵與過(guò)期策略

 更新時(shí)間:2019年11月14日 09:26:50   作者:不只Java  
這篇文章主要給大家介紹了一些應(yīng)該知道的Redis過(guò)期鍵與過(guò)期策略的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

今天,我和大家分享一篇關(guān)于 Redis 有關(guān)過(guò)期鍵的內(nèi)容,主要有四個(gè)內(nèi)容:

  • 如何設(shè)置過(guò)期鍵
  • 如何取消設(shè)置的過(guò)期時(shí)間
  • 過(guò)期鍵的過(guò)期策略是怎樣的
  • RDB、AOF 和復(fù)制對(duì)過(guò)期鍵的處理又是怎樣的

設(shè)置鍵的生存時(shí)間或過(guò)期時(shí)間

redis 一共有 4 個(gè)命令來(lái)設(shè)置鍵的生存時(shí)間(可以存活多久)或過(guò)期時(shí)間(什么時(shí)候被刪除)

  • expire <key> <ttl>:將 key 的生存時(shí)間設(shè)置為 ttl 秒
  • pexpire <key> <ttl>:將 key 的生存時(shí)間設(shè)置為 ttl 毫秒
  • expireat <key> <timestamp>:將 key 的過(guò)期時(shí)間設(shè)置為 timestamp 所指定的秒數(shù)時(shí)間戳
  • pexpireat <key> <ttl>:將 key 的過(guò)期時(shí)間設(shè)置為 timestamp 所指定的毫秒數(shù)時(shí)間戳

上述四種命令本質(zhì)上都是通過(guò) pexpireat 命令來(lái)實(shí)現(xiàn)的。

例子:
127.0.0.1:6379> set a test
OK
127.0.0.1:6379> EXPIRE a 5
(integer) 1
127.0.0.1:6379> get a // 距離設(shè)置生存時(shí)間命令的 5 秒內(nèi)執(zhí)行
"test"
127.0.0.1:6379> get a // 距離設(shè)置生存時(shí)間命令的 5 秒后執(zhí)行
(nil)

127.0.0.1:6379> set b 12
OK
127.0.0.1:6379> EXPIREAT b 1545569500
(integer) 1
127.0.0.1:6379> time
1) "1545569486"
2) "108616"
127.0.0.1:6379> get b // 距離設(shè)置 1545569500 所指定的秒數(shù)時(shí)間戳內(nèi)執(zhí)行
"12"
127.0.0.1:6379> time
1) "1545569506"
2) "208567"
127.0.0.1:6379> get b // 距離設(shè)置 1545569500 所指定的秒數(shù)時(shí)間戳后執(zhí)行
(nil)

如果自己不小心設(shè)置錯(cuò)了過(guò)期時(shí)間,那么我們可以刪除先前的過(guò)期時(shí)間

移除過(guò)期時(shí)間

persist <key> 命令可以移除一個(gè)鍵的過(guò)期時(shí)間,舉個(gè)栗子:

127.0.0.1:6379> EXPIRE c 1000
(integer) 1
127.0.0.1:6379> ttl c // 有過(guò)期時(shí)間
(integer) 9996
127.0.0.1:6379> PERSIST c
(integer) 1
127.0.0.1:6379> ttl c // 無(wú)過(guò)期時(shí)間
(integer) -1

PS:ttl 是以秒為單位,返回鍵的剩余生存時(shí)間;同理還有 pttl 命令是以毫秒為單位,返回鍵的剩余生存時(shí)間

此時(shí),如果我們沒(méi)有移除過(guò)期時(shí)間,那么如果一個(gè)鍵過(guò)期了,那它什么時(shí)候會(huì)被刪除呢?

這個(gè)問(wèn)題就會(huì)有以下三種答案了,它們分別代表三種不同的刪除策略

過(guò)期鍵的刪除策略

定時(shí)刪除

在設(shè)置鍵的過(guò)期時(shí)間的同時(shí),創(chuàng)建一個(gè)定時(shí)器,讓定時(shí)器在鍵的過(guò)期時(shí)間來(lái)臨時(shí),立即執(zhí)行對(duì)鍵的刪除操作。

優(yōu)點(diǎn):對(duì)內(nèi)存最友好的。可以及時(shí)釋放鍵所占用的內(nèi)存。

缺點(diǎn):對(duì) CPU 不友好。特別在過(guò)期鍵比較多的情況下,刪除過(guò)期鍵會(huì)占用相當(dāng)一部分 CPU 時(shí)間。同時(shí)在內(nèi)存不緊張,CPU 緊張的情況下,將 CPU 用在刪除和當(dāng)前任務(wù)不想關(guān)的過(guò)期鍵上,無(wú)疑會(huì)對(duì)服務(wù)器響應(yīng)時(shí)間和吞吐量造成影響。

惰性刪除

放任鍵過(guò)期不管,但是每次從鍵空間中讀寫(xiě)鍵時(shí),都會(huì)檢查取得的鍵是否過(guò)期。如果過(guò)期就刪除該刪,否則就返回該鍵。(PS:鍵空間是一個(gè)保存了數(shù)據(jù)庫(kù)所有鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu))

優(yōu)點(diǎn):對(duì) CPU 最友好。只有在操作的時(shí)候進(jìn)行過(guò)期檢查,刪除的目標(biāo)僅限于當(dāng)前需要處理的鍵,不會(huì)在刪除其他無(wú)關(guān)本次操作的過(guò)期鍵上花費(fèi)任何 CPU 時(shí)間。

缺點(diǎn):對(duì)內(nèi)存不友好。這個(gè)十分容易理解了,鍵過(guò)期了,但因?yàn)橐恢睕](méi)有被訪問(wèn)到,所以一直保留著(除非手動(dòng)執(zhí)行 flushdb 操來(lái)于清空當(dāng)前數(shù)據(jù)庫(kù)中的所有 key。),相當(dāng)于內(nèi)存泄漏。

定期刪除

每隔一段時(shí)間,程序就對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢查,刪除里面的過(guò)期鍵。至于要?jiǎng)h除多少過(guò)期鍵,以及檢查多少數(shù)據(jù)庫(kù),則有算法決定。

該策略是上述兩種策略的折中方案,需要通過(guò)實(shí)際情況,來(lái)設(shè)置刪除操作的執(zhí)行時(shí)長(zhǎng)和頻率。

明白了過(guò)期鍵的刪除策略后,那 redis 服務(wù)器又是采用什么策略來(lái)刪除過(guò)期鍵的呢?

實(shí)際上,Redis 服務(wù)器使用的是惰性刪除和定期刪除兩種策略,通過(guò)配合使用,服務(wù)器可以很好的平衡 CPU 和內(nèi)存。

其中惰性刪除為 redis 服務(wù)器內(nèi)置策略。而定期刪除可以通過(guò)以下兩種方式設(shè)置:

  • 配置 redis.conf 的 hz 選項(xiàng),默認(rèn)為10 (即 1 秒執(zhí)行 10 次,值越大說(shuō)明刷新頻率越快,對(duì) Redis 性能損耗也越大)
  • 配置 redis.conf 的 maxmemory 最大值,當(dāng)已用內(nèi)存超過(guò) maxmemory 限定時(shí),就會(huì)觸發(fā)主動(dòng)清理策略

RDB 對(duì)過(guò)期鍵的處理

生成 RDB 文件

程序會(huì)被數(shù)據(jù)庫(kù)中的鍵進(jìn)行檢查,過(guò)期的鍵不會(huì)被保存到新創(chuàng)建的 RDB 文件中。因此數(shù)據(jù)庫(kù)中的過(guò)期鍵不會(huì)對(duì)生成新的 RDB 文件造成影響

載入 RDB 文件

這里需要分情況說(shuō)明:

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

AOF 對(duì)過(guò)期鍵的處理

AOF 文件寫(xiě)入

當(dāng)服務(wù)器以 AOF 持久化模式運(yùn)行時(shí),如果數(shù)據(jù)庫(kù)某個(gè)過(guò)期鍵還沒(méi)被刪除,那么 AOF 文件不會(huì)因?yàn)檫@個(gè)過(guò)期鍵而產(chǎn)生任何影響,依舊保留。

而當(dāng)過(guò)期鍵被刪除后,那么程序會(huì)向 AOF 文件追加一條 DEL 命令來(lái)顯式地記錄該鍵被刪除。

AOF 重寫(xiě)

執(zhí)行 AOF 重寫(xiě)過(guò)程中,也會(huì)被數(shù)據(jù)庫(kù)的鍵進(jìn)行檢查,已過(guò)期的鍵不會(huì)被保存到重寫(xiě)后的 AOF 文件中。因此不會(huì)對(duì) AOF 重寫(xiě)造成影響

復(fù)制對(duì)過(guò)期鍵的處理

當(dāng)服務(wù)器運(yùn)行在復(fù)制模式下,由主服務(wù)器來(lái)控制從服務(wù)器的刪除過(guò)期鍵動(dòng)作,目的是保證主從服務(wù)器數(shù)據(jù)的一致性。

那到底是怎么控制的呢?

  • 主服務(wù)器刪除一個(gè)過(guò)期鍵后,會(huì)向所有從服務(wù)器發(fā)送一個(gè) DEL 命令,告訴從服務(wù)器刪除這個(gè)過(guò)期鍵
  • 從服務(wù)器接受到命令后,刪除過(guò)期鍵

PS:從服務(wù)器在接收到客戶(hù)端對(duì)過(guò)期鍵的讀命令時(shí),依舊會(huì)返回該鍵對(duì)應(yīng)的值給客戶(hù)端,而不會(huì)將其刪除。

總結(jié)

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

相關(guān)文章

  • 排查Redis大key的方法總結(jié)

    排查Redis大key的方法總結(jié)

    這篇文章主要介紹了排查Redis大key的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 從一個(gè)小需求感受Redis的獨(dú)特魅力(需求設(shè)計(jì))

    從一個(gè)小需求感受Redis的獨(dú)特魅力(需求設(shè)計(jì))

    Redis在實(shí)際應(yīng)用中使用的非常廣泛,本篇文章就從一個(gè)簡(jiǎn)單的需求說(shuō)起,為你講述一個(gè)需求是如何從頭到尾開(kāi)始做的,又是如何一步步完善的
    2019-12-12
  • 關(guān)于linux redis安裝及安裝遇到的問(wèn)題

    關(guān)于linux redis安裝及安裝遇到的問(wèn)題

    這篇文章主要介紹了關(guān)于linux redis安裝及安裝遇到的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Redis解決跨域存取Session問(wèn)題

    Redis解決跨域存取Session問(wèn)題

    本文主要介紹了Redis解決跨域存取Session問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 基于Redission的分布式鎖實(shí)戰(zhàn)

    基于Redission的分布式鎖實(shí)戰(zhàn)

    本文主要介紹了基于Redission的分布式鎖實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • redis限流的實(shí)際應(yīng)用

    redis限流的實(shí)際應(yīng)用

    這篇文章主要介紹了redis限流的實(shí)際應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Redis全量同步和增量同步原理

    Redis全量同步和增量同步原理

    主從第一次同步是全量同步:也就是說(shuō),當(dāng)你主從節(jié)點(diǎn)連接建立后,需要執(zhí)行一次全量同步,但如果slave重啟后同步,此時(shí)slave重啟后,slave節(jié)點(diǎn)和master節(jié)點(diǎn)的數(shù)據(jù)之間有落后,因此需要進(jìn)行增量同步,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • Redis中切片集群詳解

    Redis中切片集群詳解

    切片集群Redis中,數(shù)據(jù)增多了,是該加內(nèi)存還是加實(shí)例?采用云主機(jī)來(lái)運(yùn)行Redis實(shí)例,那么,該如何選擇云主機(jī)的內(nèi)存容量呢?用Redis保存5000萬(wàn)個(gè)鍵值對(duì),每個(gè)鍵值對(duì)大約是512B方案一:大內(nèi)存云主機(jī):選擇一臺(tái)32GB內(nèi)存的云主機(jī)來(lái)部署Redis
    2025-01-01
  • 關(guān)于Redis你可能不了解的一些事

    關(guān)于Redis你可能不了解的一些事

    這篇文章主要給大家介紹了關(guān)于Redis你可能不了解的一些事,對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式

    Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式

    這篇文章主要介紹了Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評(píng)論

竹溪县| 商洛市| 东方市| 惠水县| 岢岚县| 东莞市| 大足县| 阿尔山市| 尖扎县| 公安县| 专栏| 双柏县| 琼海市| 磐石市| 上犹县| 霍城县| 女性| 台湾省| 新巴尔虎左旗| 大理市| 科技| 紫阳县| 姜堰市| 保靖县| 庄浪县| 田东县| 广宗县| 靖远县| 登封市| 景德镇市| 远安县| 吉林市| 武山县| 门源| 诸城市| 灌阳县| 永泰县| 黑河市| 崇阳县| 陇川县| 达州市|