1. 程式人生 > >一文了解:Redis過期鍵刪除策略

一文了解:Redis過期鍵刪除策略

Redis過期鍵刪除策略

Redis中所有的鍵都可以設定過期策略,就像是所有的鍵都可以上"生死簿",上了生死簿的鍵到時間後閻王就會叉掉這個鍵。同一時間大量的鍵過期,閻王就會忙不過來。同時因為Redis是單執行緒的,導致閻王的處理時間會變得很長,而且處理繁忙,Redis就會出現卡頓現象。

Redis有三種策略刪除過期Key

相關命令

expire key seconds  # 過期時間為秒數,key不存在時返回(integer) 0,key存在的時返回(integer) 1

pexpire key milliseconds # 同expire,設定的過期時間為毫秒數

setex key seconds value # 只能設定字串的過期時間

ttl key # 檢視Key的過期時間(秒數),用不過期返回(integer) -1,Key不存在返回(integer) -2

pttl key # 同ttl,返回毫秒數

過期Key

Redis的每個設定了過期時間的Key都會放在一個獨立的字典中,用於遍歷刪除。

過期策略

被動刪除

Key在被操作時,Redis主動檢查Key是否過期,過期則刪除,返回nil

  1. 對CPU友好,只有Key在被操作時刪除,不會浪費CPU時間
  2. 對記憶體不友好,如果同時有大量的Key過期,這些Key在被使用之前不會被刪除,就會浪費記憶體

主動刪除

Redis會週期性的隨機掃描一批設定了過期時間的Key並進行處理,Redis每秒進行10次過期掃描會做的操作有:

  1. 隨機掃描100個設定了過期時間的Key
  2. 刪除所有發現的過期Key
  3. 如果刪除的Key超過1/4則重複步驟1
hz 10

Redis除了設定每秒10次的掃描頻率之外,還設定了每次掃描不會超過25ms的上限,以防出現過度迴圈掃描,導致執行緒卡死。

maxmemory

# maxmemory <bytes>

當已用的記憶體超過maxmemory 配置的記憶體時,會觸發主動清除策略

# maxmemory-policy noeviction
  1. noeviction 永不過期策略,當已用記憶體超過maxmemory配置時,寫操作將返回錯誤,讀操作和del操作可以繼續服務。
  2. volatile-lru 只刪除設定了過期時間的Key,使用頻率越少的Key優先刪除,不會對沒有設定過期時間的Key刪除
  3. volatile-ttl 和上面一樣,只刪除設定過期時間的Key,TTL過期時間越少優先刪除
  4. volatile-random 隨機刪除快要過期的Key
  5. allkeys-lru 和lru一樣,刪除所有的Key,沒有設定過期時間的Key也會被刪除
  6. allkeys-random 和上面一樣,刪除掉隨機的Key

Redis採用的過期策略

被動刪除+主動刪除

結語

本人深知水平有限,歡迎指正本文錯誤之處。


相關推薦

Redis過期刪除策略

Redis過期鍵刪除策略 Redis中所有的鍵都可以設定過期策略,就像是所有的鍵都可以上"生死簿",上了生死簿的鍵到時間後閻王就會叉掉這個鍵。同一時間大量的鍵過期,閻王就會忙不過來。同時因為Redis是單執行緒的,導致閻王的處理時間會變得很長,而且處理繁忙,Redis就會出現卡頓現象。 R

Redis基礎型別

一文了解:Redis基礎型別 Redis特點 開源的,BSD許可高階的key-value儲存系統 可以用來儲存字串,雜湊結構,連結串列,集合 安裝 windows:https://github.com/microsoftarchive/redis/releases mac\linux:http://www.r

Redis事務

Redis事務 事務提供了一種"將多個命令打包,一次性提交併按順序執行"的機制,提交後在事務執行中不會中斷。只有在執行完所有命令後才會繼續執行來自其他客戶的訊息。 Redis中的使用 Redis通過multi,exec,discard,watch實現事務功能。 multi:開始事務 exec:提交事務並執行

Redis的RDB持久化

一文了解:Redis的RDB持久化 Redis是記憶體資料庫,為了保證資料不在故障後丟失,Redis需要將資料持久化到硬碟上。 Redis持久化有兩種方式:一種是快照,全量備份。一種是AOF方式,連續增量方式。 RDB RDB持久化就是把資料生成快照儲存到硬碟的過程。每N分鐘資料傳送了M次寫操作之後,從記憶體

Redis的AOF持久化

Redis的AOF持久化 每當Redis-Server接收到寫資料時,就把命令以文字形式追加到AOF檔案裡,當重啟Redis服務時,AOF檔案裡的命令會被重新執行一次,重新恢復資料。當AOF過大時將重寫AOF檔案。 工作原理 > lpush list 1 2 3 4 (integer) 4 127.0.

Redis主從複製

Redis主從複製 主從複製 主從複製,將一臺Redis伺服器的資料,複製到其他Redis伺服器。前者稱為主(master)節點,後者稱為從(slave)節點 。 在預設的情況下,Redis都是主節點,每個從節點只能有一個主節點,一個主節點可以有多個從節點。複製的資料只能從主節點複製到從節點。 配置方式 在

redis 過期刪除策略

redis 的過期鍵的過期時間都儲存在過期字典中,過期鍵的刪除策略有3種 定時刪除:在設定鍵的過期時間的同時,建立一個定時器,讓定時器在鍵的過期時間來臨時,立即刪除對鍵的刪除操作。 惰性刪除:放任鍵過期不管,但每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵。如果沒有過期,

推薦 AI時代的資料風險(後真相時代、演算法囚徒和權利讓渡)

當今,在基於資料的個性化推薦演算法機制滿足了人們獵奇心、窺探欲、表演慾,讓人們在網路中尋找到共鳴

夯實Java基礎系列4final關鍵字的特性、使用方法,以及實現原理

目錄 final使用 final變數 final修飾基本資料型別變數和引用 final類 final關鍵字的知識點 final關鍵字的最佳實踐 final的用法 關於空白final final記憶體分配 使用final修飾方法會提高速度和效率嗎 使用final修飾變數會讓變數的值不能被改變嗎; 如何保

Redis 記憶體監控和記憶體消耗

Redis 是一種記憶體資料庫,將資料儲存在記憶體中,讀寫效率要比傳統的將資料儲存在磁碟上的資料庫要快很多。所以,監控 Redis 的記憶體消耗並瞭解 Redis 記憶體模型對高效並長期穩定使用 Redis 至關重要。 記憶體使用統計 通過 info memory 命令可以獲得 Redis 記憶體相關的指

[翻譯自官方]什麼是RDB和AOF? Redis持久化!

  ​概述 本文提供Redis持久化技術說明,  建議所有Redis使用者閱讀. 如果您想更深入瞭解Redis永續性原理機制和底層永續性保證, 請參考文章 揭祕Redis持久化: http://antirez.com/post/redis-persistence-demystifie

sun.misc.Unsafe

類型轉換 鏈接 str DC arch lang 生態 rip export Java語言和JVM平臺已經度過了20歲的生日。它最初起源於機頂盒、移動設備和Java-Card,同時也應用在了各種服務器系統中,Java已成為物聯網(Internet of Things)的通用

網絡安全數字化轉型,Gartner的這些數字驚呆你!

紅芯企業瀏覽器 數字化轉型提起網絡安全立馬會想到Facebook泄密門受影響的用戶已達到8700 萬事實甚至比這個數字還要多得多連媒體都在感嘆網絡安全界真是“多事之秋”啊! 而Gartner近期發布的全球網絡安全產業規模發展及趨勢預測,那些關於網安行業的數字更是驚人。 “數字安全大家族”來啦 網絡安全問題由來

安卓APP逆向分析與保護機制

dex 也不會 時也 也有 包含 啟動 RM 操作 混亂 “知物由學”是網易雲易盾打造的一個品牌欄目,詞語出自漢·王充《論衡·實知》。人,能力有高下之分,學習才知道事物的道理,而後才有智慧,不去求問就不會知道。“知物由學”希望通過一篇篇技術幹貨、趨勢解讀、人物思考和沈澱給你

c/c++、java、JavaScript、php、Python的用途

BE 算法實現 分布式 底層 web服務器 物聯網 文檔 性能 爆發 編程語言是用來定義計算機程序的形式語言。它是一種被標準化的交流技巧,用來向計算機發出指令。一種計算機語言讓程序員能夠準確地定義計算機所需要使用的數據,並精確地定義在不同情況下所應當采取的行動。 C和C+

“Service Mesh(服務網格)”的歷史與現在

對於大多數人來說,“Service Mesh(服務網格)”仍然是一個新概念,因此,談論它的“歷史”可能看起來有點滑稽。但事實上,早在2010年初,在一些大網路規模的公司中,服務網格的概念就隱約開始逐步形成了。因此,服務網格確實有一段歷史值得去探索、去理解。  

強化學習

雖然是週末,也保持充電,今天來看看強化學習,不過不是要用它來玩遊戲,而是覺得它在製造業,庫存,電商,廣告,推薦,金融,醫療等與我們生活息息相關的領域也有很好的應用,當然要了解一下了。 本文結構: 定義 和監督式學習

,大資料就業薪資怎麼樣?

大資料行業薪資高,是顯而易見的,於此同時,大資料崗位薪資的範圍也是比較寬的,這關係到個人的學歷學科背景,技術掌握情況,當然各個地區的薪資肯定是不同的。本文從三個角度來分析薪資。先從科多大資料的一個大資料開發培訓班來了解初級大資料崗位的薪資情況,對於很多初入大資料行業的人來說,這個比較有參考性,其次從

前端、後端、全棧都學什麼?薪資前景如何?

隨著資訊產業的迅猛發展,IT行業人才需求量也在逐年擴大。 據國內權威資料統計,未來五年,我國資訊化人才總需求量高達1500萬—2000萬人。其中“軟體開發”、“網路工程”等人才的缺口最為突出。以軟體開發為例,我國軟體人才需求以每年遞增20%的速度增長,每年新增需求近百萬。 這也是目前很多非科

Android中路由(Router)的實現

Router 對於一個功能越來越複雜的APP來說,路由對於程式碼的解耦、頁面靈活跳轉配置、頁面攔截功能提供了很好的支援。下面我將分析業界比較出名的兩個路由框架WMRouter和ARouter的原始碼,瞭解他們的實現原理。 這兩個框架的實現核心原理是差不多的: 通過註解標註路由資訊,在編譯期動態掃描路由資訊