国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - 大家都應該知道的Redis過期鍵與過期策略

大家都應該知道的Redis過期鍵與過期策略

2019-11-29 16:46不只Java Redis

這篇文章主要給大家介紹了一些應該知道的Redis過期鍵與過期策略的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

今天,我和大家分享一篇關于 Redis 有關過期鍵的內容,主要有四個內容:

  • 如何設置過期鍵
  • 如何取消設置的過期時間
  • 過期鍵的過期策略是怎樣的
  • RDB、AOF 和復制對過期鍵的處理又是怎樣的

設置鍵的生存時間或過期時間

redis 一共有 4 個命令來設置鍵的生存時間(可以存活多久)或過期時間(什么時候被刪除)

  • expire <key> <ttl>:將 key 的生存時間設置為 ttl 秒
  • pexpire <key> <ttl>:將 key 的生存時間設置為 ttl 毫秒
  • expireat <key> <timestamp>:將 key 的過期時間設置為 timestamp 所指定的秒數時間戳
  • pexpireat <key> <ttl>:將 key 的過期時間設置為 timestamp 所指定的毫秒數時間戳

上述四種命令本質上都是通過 pexpireat 命令來實現的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
例子:
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 // 距離設置生存時間命令的 5 秒內執行
"test"
127.0.0.1:6379> get a // 距離設置生存時間命令的 5 秒后執行
(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 // 距離設置 1545569500 所指定的秒數時間戳內執行
"12"
127.0.0.1:6379> time
1) "1545569506"
2) "208567"
127.0.0.1:6379> get b // 距離設置 1545569500 所指定的秒數時間戳后執行
(nil)

如果自己不小心設置錯了過期時間,那么我們可以刪除先前的過期時間

移除過期時間

persist <key> 命令可以移除一個鍵的過期時間,舉個栗子:

?
1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> EXPIRE c 1000
(integer) 1
127.0.0.1:6379> ttl c // 有過期時間
(integer) 9996
127.0.0.1:6379> PERSIST c
(integer) 1
127.0.0.1:6379> ttl c // 無過期時間
(integer) -1
 
PS:ttl 是以秒為單位,返回鍵的剩余生存時間;同理還有 pttl 命令是以毫秒為單位,返回鍵的剩余生存時間

此時,如果我們沒有移除過期時間,那么如果一個鍵過期了,那它什么時候會被刪除呢?

這個問題就會有以下三種答案了,它們分別代表三種不同的刪除策略

過期鍵的刪除策略

定時刪除

在設置鍵的過期時間的同時,創建一個定時器,讓定時器在鍵的過期時間來臨時,立即執行對鍵的刪除操作。

優點:對內存最友好的。可以及時釋放鍵所占用的內存。

缺點:對 CPU 不友好。特別在過期鍵比較多的情況下,刪除過期鍵會占用相當一部分 CPU 時間。同時在內存不緊張,CPU 緊張的情況下,將 CPU 用在刪除和當前任務不想關的過期鍵上,無疑會對服務器響應時間和吞吐量造成影響。

惰性刪除

放任鍵過期不管,但是每次從鍵空間中讀寫鍵時,都會檢查取得的鍵是否過期。如果過期就刪除該刪,否則就返回該鍵。(PS:鍵空間是一個保存了數據庫所有鍵值對的數據結構)

優點:對 CPU 最友好。只有在操作的時候進行過期檢查,刪除的目標僅限于當前需要處理的鍵,不會在刪除其他無關本次操作的過期鍵上花費任何 CPU 時間。

缺點:對內存不友好。這個十分容易理解了,鍵過期了,但因為一直沒有被訪問到,所以一直保留著(除非手動執行 flushdb 操來于清空當前數據庫中的所有 key。),相當于內存泄漏。

定期刪除

每隔一段時間,程序就對數據庫進行檢查,刪除里面的過期鍵。至于要刪除多少過期鍵,以及檢查多少數據庫,則有算法決定。

該策略是上述兩種策略的折中方案,需要通過實際情況,來設置刪除操作的執行時長和頻率。

明白了過期鍵的刪除策略后,那 redis 服務器又是采用什么策略來刪除過期鍵的呢?

實際上,Redis 服務器使用的是惰性刪除和定期刪除兩種策略,通過配合使用,服務器可以很好的平衡 CPU 和內存。

其中惰性刪除為 redis 服務器內置策略。而定期刪除可以通過以下兩種方式設置:

  • 配置 redis.conf 的 hz 選項,默認為10 (即 1 秒執行 10 次,值越大說明刷新頻率越快,對 Redis 性能損耗也越大)
  • 配置 redis.conf 的 maxmemory 最大值,當已用內存超過 maxmemory 限定時,就會觸發主動清理策略

RDB 對過期鍵的處理

生成 RDB 文件

程序會被數據庫中的鍵進行檢查,過期的鍵不會被保存到新創建的 RDB 文件中。因此數據庫中的過期鍵不會對生成新的 RDB 文件造成影響

載入 RDB 文件

這里需要分情況說明:

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

AOF 對過期鍵的處理

AOF 文件寫入

當服務器以 AOF 持久化模式運行時,如果數據庫某個過期鍵還沒被刪除,那么 AOF 文件不會因為這個過期鍵而產生任何影響,依舊保留。

而當過期鍵被刪除后,那么程序會向 AOF 文件追加一條 DEL 命令來顯式地記錄該鍵被刪除。

AOF 重寫

執行 AOF 重寫過程中,也會被數據庫的鍵進行檢查,已過期的鍵不會被保存到重寫后的 AOF 文件中。因此不會對 AOF 重寫造成影響

復制對過期鍵的處理

當服務器運行在復制模式下,由主服務器來控制從服務器的刪除過期鍵動作,目的是保證主從服務器數據的一致性。

那到底是怎么控制的呢?

  • 主服務器刪除一個過期鍵后,會向所有從服務器發送一個 DEL 命令,告訴從服務器刪除這個過期鍵
  • 從服務器接受到命令后,刪除過期鍵

PS:從服務器在接收到客戶端對過期鍵的讀命令時,依舊會返回該鍵對應的值給客戶端,而不會將其刪除。

總結

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

原文鏈接:https://segmentfault.com/a/1190000017776475

延伸 · 閱讀

精彩推薦
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
主站蜘蛛池模板: 亚洲中午字幕 | 中文字幕乱码亚洲精品一区 | 中文字幕亚洲欧美 | 亚洲欧美日韩国产综合 | 欧美专区中文字幕 | 亚洲一区二区中文 | 视频在线一区二区 | 免费在线观看黄色 | 欧美日韩精品免费 | 成年人免费在线观看网站 | 成人av一级片 | 日韩在线中文字幕 | 午夜精品影院 | 国产精品成人国产乱一区 | 国内精品视频 | 亚洲国产精品一区 | 在线观看一区二区视频 | 国产成人精品综合 | 亚洲中字幕 | 在线播放亚洲 | 久久爱综合 | 黄色欧美视频 | 欧美日韩三级在线 | 日韩在线不卡 | 91人人网 | 特级av| 欧美日韩视频一区二区 | 中文字幕在线观看av | 欧洲精品一区 | 精品久久99 | 亚洲一区久久 | 视频一区二区国产 | 国产999精品久久久久久 | 国产精品国产精品国产专区不卡 | 欧美视频一区二区 | 色香蕉视频 | 黄色一级免费大片 | 久久国产精品系列 | 国产成人av在线播放 | 国产精品1区2区在线观看 | 欧美一级在线观看 |