自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

生存還是毀滅,Redis會怎么辦!

數(shù)據(jù)庫 Redis
Redis的過期策略采用惰性刪除和定期刪除兩種組合方式,其中惰性刪除保證過期鍵一點過不會被使用,定期刪除可以保證過期數(shù)據(jù)得到釋放,優(yōu)化資源占用率。

?1.前言

開端只是一個引文,不過有時候也值得大家去思考一番,下面進入正題。

下面分幾個部分講啦,先來回顧一下Redis鍵的生存時間,過期時間的設置;然后會講到過期鍵刪除策略;然后會聊其他功能對過期鍵的處理。

2.鍵的生存時間

鍵過期時間設置通過Expire命令或者Pexpire命令,客戶端可以以毫秒級的精度為數(shù)據(jù)庫中的某個鍵設置生存時間,一段時間后Redis服務器會刪除生存時間為0的鍵。下面我們看一下Redis鍵的過期時間設置,以及查詢鍵剩余壽命。

EXPIRE key 5 #設置一個鍵的過期時間 單位秒
EXPIREAT KEY 1660753861 #設置過期時間某個時間戳過期(UNIX時間戳)單位秒

PEXPIRE key 33 #設置一個鍵的過期時間 單位毫秒
PEXPIREAT key 1660839534000 #設置過期時間某個時間戳過期(UNIX時間戳)單位毫秒

TTL key # 返回鍵的剩余過期時長,單位秒
PTTL key # 返回鍵的剩余過期時長,單位毫秒

Redis中的這些鍵的過期時間如何保存

Redis中維護了一個過期字典。其數(shù)據(jù)結構中,字典的鍵是一個指針,指向某個數(shù)據(jù)庫鍵,而字典的鍵值則是一個long類型的整數(shù),表示一個毫秒精度的UNIX時間戳。

其實上面幾種設置鍵過期時間的命令相當于最后都是調(diào)用 PEXPIREAT 這個命令。

3.鍵的過期刪除策略

3.1 如何判定鍵過期

Redis中判斷鍵是否過期會使用以下的方法

  • 檢查給定的鍵是否存在于過期字典,如果存在則獲取鍵的過期時間
  • 檢查當前的UNIX時間戳是否大于鍵的過期時間戳,大于過期時間戳的話則判定鍵過期

3.2 三種過期鍵刪除策略

常見刪除策略有三種:定時刪除、惰性刪除、定期刪除

3.2.1定時刪除

定時刪除是在設置鍵的過期時間時,設置一個定時器,定時器會在鍵的過期時間到來時立即刪除鍵

  • 優(yōu)點:內(nèi)存友好,可以保證過期鍵盡可能快速地被刪除,釋放內(nèi)存。
  • 缺點:CPU資源分配不友好,如果過期鍵比較多的時候,此時刪除會占用大量的CPU資源,從而間接影響Redis的性能。

3.2.2惰性刪除

惰性刪除只會在程序需要使用鍵時,才會對當前鍵進行過期檢查,而不會去刪除其他的過期鍵。

  • 優(yōu)點:CPU資源耗費小,因為只是在取出鍵的時候才會做過期檢查,并刪除等操作。
  • 缺點:過期鍵會占用內(nèi)存,如果一個過期鍵永遠不被使用,那么就永遠不能被刪除,會造成內(nèi)存泄漏。

惰性刪除執(zhí)行步驟如下:

  • 執(zhí)行讀寫命令時去檢查鍵的過期時間
  • 如果鍵過期,刪除鍵,整個流程會按照鍵不存在的情況處理
  • 如果鍵未過期,則按照鍵存在的情況執(zhí)行命令

3.2.3定期刪除

定期刪除是每隔一段時間執(zhí)行一次過期鍵刪除操作,可以通過限制刪除的操作執(zhí)行的時長和頻率來減少CPU資源占用。同時定期刪除策略不會導致過期鍵過多的堆積,造成大量內(nèi)存泄漏。

定期刪除策略有兩個點比較重要,執(zhí)行時長和執(zhí)行頻率。需要兩者結合才能達到最優(yōu)的效果。

定期刪除步驟:

  • 從設置過期時間的key的集合中隨機檢查20個key
  • 刪除其中的過期鍵。如果檢查結果中25%以上的key過期,則開始新一輪任務。
  • 每次會按順序在每個數(shù)據(jù)庫執(zhí)行,如果在3號數(shù)據(jù)庫返回,則會記錄下來,下次刪除操作執(zhí)行的時候會從4號數(shù)據(jù)庫開始,就這樣循環(huán)遍歷整個Redis數(shù)據(jù)庫。

定期任務執(zhí)行頻率:

為了定期檢測資源和服務狀態(tài)并根據(jù)預定策略執(zhí)行相應的操作,Redis會調(diào)用內(nèi)部函數(shù)來執(zhí)行多種后臺任務。

其執(zhí)行頻率由hz參數(shù)指定,默認為10,即每秒執(zhí)行10次。

圖片

這個值可以設置1-500,但是官方建議設置100以下,設置過大會造成CPU資源占用過大?;旧现挥媚J值就能滿足大部分需求。

4.其他功能對過期鍵的處理

Redis數(shù)據(jù)保存有AOF和RDB兩種功能。對于過期鍵的處理也不相同。

RDB持久化對過期鍵的處理:

  • 生成RDB文件時。 過期key會被忽略,從而不會被保存到RDB文件中
  • 加載RDB文件。

主服務器模式。載入RDB文件時,會對key的過期時間進行檢查,過期鍵會被忽略,不會加載到Redis中

從服務器模式。所有數(shù)據(jù)key都會加載到Redis中

AOF持久化對過期鍵的處理:

  • AOF文件寫入的時候,會append刪除語句, DEL key 。
  • AOF重寫的時候過期key則不會被寫入AOF文件中。

當Redis服務器處于復制模式時對過期鍵的處理:

  • 主服務器刪除key時,會向從服務器發(fā)送DEL命令
  • 從服務器不會處理過期key
  • 從服務器只有接到Master發(fā)送的DEL命令才會刪除key

總結

Redis的過期策略采用惰性刪除和定期刪除兩種組合方式,其中惰性刪除保證過期鍵一點過不會被使用,定期刪除可以保證過期數(shù)據(jù)得到釋放,優(yōu)化資源占用率。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2011-02-16 09:21:44

ReactOSWindows

2016-09-20 09:18:29

存儲

2019-10-12 09:50:46

Redis內(nèi)存數(shù)據(jù)庫

2018-03-27 10:25:47

3D打印模型3D打印市場

2024-10-09 17:06:52

RedisHash哈希表

2024-10-18 09:55:50

RedisHash數(shù)據(jù)

2021-10-01 00:12:12

Redis分布式

2024-03-13 13:25:09

Redis分布式鎖

2021-01-05 10:48:38

RedisAOF日志RDB快照

2018-09-10 16:08:36

區(qū)塊鏈加密貨幣數(shù)字貨幣

2021-04-13 10:41:25

Redis內(nèi)存數(shù)據(jù)庫

2021-01-26 08:02:04

Redis內(nèi)存數(shù)據(jù)庫

2020-09-21 15:03:52

前端開發(fā)技術

2022-04-24 08:23:19

Redis內(nèi)存淘汰策略

2022-02-17 08:57:18

內(nèi)存設計進程

2021-03-17 10:55:14

Redis哈希數(shù)據(jù)庫

2018-01-28 20:39:39

戴爾

2022-07-05 11:48:47

MySQL死鎖表鎖

2009-11-03 08:56:02

linux死機操作系統(tǒng)

2022-05-19 08:01:49

PostgreSQL數(shù)據(jù)庫
點贊
收藏

51CTO技術棧公眾號