跳到主要內容

Redis詳解(十一)------ 過期刪除策略和內存淘汰策略_網頁設計公司


網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!



當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!


  在介紹這篇文章之前,我們先來看如下幾個問題:


  ①、如何設置Redis鍵的過期時間?


  ②、設置完一個鍵的過期時間后,到了這個時間,這個鍵還能獲取到么?假如獲取不到那這個鍵還佔據着內存嗎?


  ③、如何設置Redis的內存大小?當內存滿了之後,Redis有哪些內存淘汰策略?我們又該如何選擇?


  如果上面的幾個問題你都懂,那麼下面的內容你就不用看了;如果你不是很懂,那就帶着這些問題往下看。


1、設置Redis鍵過期時間


  Redis提供了四個命令來設置過期時間(生存時間)。


  ①、EXPIRE <key> <ttl> :表示將鍵 key 的生存時間設置為 ttl 秒。


  ②、PEXPIRE <key> <ttl> :表示將鍵 key 的生存時間設置為 ttl 毫秒。


  ③、EXPIREAT <key> <timestamp> :表示將鍵 key 的生存時間設置為 timestamp 所指定的秒數時間戳。


  ④、PEXPIREAT <key> <timestamp> :表示將鍵 key 的生存時間設置為 timestamp 所指定的毫秒數時間戳。


  PS:在Redis內部實現中,前面三個設置過期時間的命令最後都會轉換成最後一個PEXPIREAT 命令來完成。


  另外補充兩個知識點:


  一、移除鍵的過期時間


  PERSIST <key> :表示將key的過期時間移除。


  二、返回鍵的剩餘生存時間


  TTL <key> :以秒的單位返回鍵 key 的剩餘生存時間。


  PTTL <key> :以毫秒的單位返回鍵 key 的剩餘生存時間。


2、Redis過期時間的判定


  在Redis內部,每當我們設置一個鍵的過期時間時,Redis就會將該鍵帶上過期時間存放到一個過期字典中。當我們查詢一個鍵時,Redis便首先檢查該鍵是否存在過期字典中,如果存在,那就獲取其過期時間。然後將過期時間和當前系統時間進行比對,比系統時間大,那就沒有過期;反之判定該鍵過期。


3、過期刪除策略


  通常刪除某個key,我們有如下三種方式進行處理。


①、定時刪除


  在設置某個key 的過期時間同時,我們創建一個定時器,讓定時器在該過期時間到來時,立即執行對其進行刪除的操作。


  優點:定時刪除對內存是最友好的,能夠保存內存的key一旦過期就能立即從內存中刪除。


  缺點:對CPU最不友好,在過期鍵比較多的時候,刪除過期鍵會佔用一部分 CPU 時間,對服務器的響應時間和吞吐量造成影響。


②、惰性刪除


  設置該key 過期時間后,我們不去管它,當需要該key時,我們在檢查其是否過期,如果過期,我們就刪掉它,反之返回該key。


  優點:對 CPU友好,我們只會在使用該鍵時才會進行過期檢查,對於很多用不到的key不用浪費時間進行過期檢查。


  缺點:對內存不友好,如果一個鍵已經過期,但是一直沒有使用,那麼該鍵就會一直存在內存中,如果數據庫中有很多這種使用不到的過期鍵,這些鍵便永遠不會被刪除,內存永遠不會釋放。從而造成內存泄漏。


③、定期刪除


  每隔一段時間,我們就對一些key進行檢查,刪除裏面過期的key。


  優點:可以通過限制刪除操作執行的時長和頻率來減少刪除操作對 CPU 的影響。另外定期刪除,也能有效釋放過期鍵佔用的內存。


  缺點:難以確定刪除操作執行的時長和頻率。


※想知道最厲害的網頁設計公司嚨底家"!



RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌



     如果執行的太頻繁,定期刪除策略變得和定時刪除策略一樣,對CPU不友好。


     如果執行的太少,那又和惰性刪除一樣了,過期鍵佔用的內存不會及時得到釋放。


     另外最重要的是,在獲取某個鍵時,如果某個鍵的過期時間已經到了,但是還沒執行定期刪除,那麼就會返回這個鍵的值,這是業務不能忍受的錯誤。


4、Redis過期刪除策略


  前面討論了刪除過期鍵的三種策略,發現單一使用某一策略都不能滿足實際需求,聰明的你可能想到了,既然單一策略不能滿足,那就組合來使用吧。


  沒錯,Redis的過期刪除策略就是:惰性刪除和定期刪除兩種策略配合使用。


  惰性刪除:Redis的惰性刪除策略由 db.c/expireIfNeeded 函數實現,所有鍵讀寫命令執行之前都會調用 expireIfNeeded 函數對其進行檢查,如果過期,則刪除該鍵,然後執行鍵不存在的操作;未過期則不作操作,繼續執行原有的命令。


  定期刪除:由redis.c/activeExpireCycle 函數實現,函數以一定的頻率運行,每次運行時,都從一定數量的數據庫中取出一定數量的隨機鍵進行檢查,並刪除其中的過期鍵。


  注意:並不是一次運行就檢查所有的庫,所有的鍵,而是隨機檢查一定數量的鍵。


  定期刪除函數的運行頻率,在Redis2.6版本中,規定每秒運行10次,大概100ms運行一次。在Redis2.8版本后,可以通過修改配置文件redis.conf 的 hz 選項來調整這個次數。


  


 


  看上面對這個參數的解釋,建議不要將這個值設置超過 100,否則會對CPU造成比較大的壓力。


  我們看到,通過過期刪除策略,對於某些永遠使用不到的鍵,並且多次定期刪除也沒選定到並刪除,那麼這些鍵同樣會一直駐留在內存中,又或者在Redis中存入了大量的鍵,這些操作可能會導致Redis內存不夠用,這時候就需要Redis的內存淘汰策略了。


5、內存淘汰策略


①、設置Redis最大內存


  在配置文件redis.conf 中,可以通過參數 maxmemory <bytes> 來設定最大內存:


  


  不設定該參數默認是無限制的,但是通常會設定其為物理內存的四分之三。(這裡有個疑惑:為啥作者不考慮將此參數設定為百分比呢?)


②、設置內存淘汰方式


  當現有內存大於 maxmemory 時,便會觸發redis主動淘汰內存方式,通過設置 maxmemory-policy ,有如下幾種淘汰方式:


  1)volatile-lru   利用LRU算法移除設置過過期時間的key (LRU:最近使用 Least Recently Used ) 。


  2)allkeys-lru   利用LRU算法移除任何key (和上一個相比,刪除的key包括設置過期時間和不設置過期時間的)。通常使用該方式


  3)volatile-random 移除設置過過期時間的隨機key 。


  4)allkeys-random  無差別的隨機移除。


  5)volatile-ttl   移除即將過期的key(minor TTL) 


  6)noeviction 不移除任何key,只是返回一個寫錯誤 ,默認選項,一般不會選用。


  在redis.conf 配置文件中,可以設置淘汰方式:


  


6、總結


  通過上面的介紹,相信大家對Redis的過期數據刪除策略和內存淘汰策略有一定的了解了。這裏總結一下:


  Redis過期刪除策略是採用惰性刪除和定期刪除這兩種方式組合進行的,惰性刪除能夠保證過期的數據我們在獲取時一定獲取不到,而定期刪除設置合適的頻率,則可以保證無效的數據及時得到釋放,而不會一直佔用內存數據。


  但是我們說Redis是部署在物理機上的,內存不可能無限擴充的,當內存達到我們設定的界限后,便自動觸發Redis內存淘汰策略,而具體的策略方式要根據實際業務情況進行選取。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!



透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊





Orignal From: Redis詳解(十一)------ 過期刪除策略和內存淘汰策略_網頁設計公司

留言

這個網誌中的熱門文章

旅館疑有臭蟲 北市府稽查找嘸

有民眾抱怨,日前投宿的北市某旅館疑似出現臭蟲,北市觀傳局與衛生局、環保局聯合稽查,但因為沒有發現蟲屍,無法確認該旅館是否真有臭蟲,市府下周將召開專家會議處理該案,市長蔣萬安則允諾會以最高規格防範臭蟲。 北市某旅館傳出疑有臭蟲,議員陳宥丞23日在市政總質詢詢問市府處理進度,並指出法國、澳洲、韓國的臭蟲,起初都現蹤公車或地鐵卻沒被發現,直到大規模爆發,才付出大量社會成本處理,而且一般殺蟲劑無法殺掉臭蟲,北市是否有因應措施? 觀傳局主任祕書蕭君杰表示,21日聯合環保局、衛生局到該旅館稽查,但沒有發現臭蟲,也沒有查到蟲卵跡象,只能檢查現場環境是否符合衛生相關規定,但環保局有指導業者如何針對臭蟲清潔消毒。觀傳局長王秋冬指出,下周會與專家學者召開會議,以最高規格處理此案。 想知道購買電動車哪裡補助最多? 台中電動車 補助資訊懶人包彙整 ;推薦評價好的 iphone維修 中心擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢住家的頂樓裝 太陽光電 聽說可發揮隔熱功效一線推薦東陽能源擁有核心技術、產品研發、系統規劃設置、專業團隊的太陽能發電廠商。 網頁設計 一頭霧水該從何著手呢? 回頭車 貨運收費標準宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念 台中搬家公司 教你幾個打包小技巧,輕鬆整理裝箱!還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」 台中搬家 公司費用怎麼算?擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司好山好水 露營車 漫遊體驗露營車x公路旅行的十一個出遊特色。走到哪、玩到哪,彈性的出遊方案,行程跟出發地也可客製 廣告預算用在刀口上, 台北網頁設計 公司幫您達到更多曝光效益; 電動車補助 衛生局疾病管制科長張惠美表示,現場查到與臭蟲無關的多項衛生缺失,包含未提供從業人員體檢報告、簡易外傷藥品及器材超過有效期、紗窗有破損等,已要求業者2周內改善,將擇期複查,如果複查不合格,將依法裁罰3000元至2萬元罰鍰。 但陳宥丞批評,環保局未公告哪些藥劑能殺死臭蟲,很擔心北市會和韓國、法國一樣,把臭蟲防治交給民間恐造成大規模爆發,且北市內的廢棄傢俱回收廠也有可能成為臭蟲孳生的...

必知必會-存儲器層次結構

相信大家一定都用過各種存儲技術,比如mysql,mongodb,redis,mq等,這些存儲服務性能有非常大的區別,其中之一就是底層使用的存儲設備不同。作為一個程序員,你需要理解存儲器的層次結構,這樣才能對程序的性能差別瞭然於心。今天帶大家了解下計算機系統存儲器的層次結構。 存儲技術 首先了解下什麼是存儲器系統? 實質上就是一個具有不同容量、成本和訪問時間的存儲設備的層次結構。從快到慢依次為:CPU寄存器、高速緩存、主存、磁盤; 這裏給大家介紹一組數據,讓大家有一個更清晰的認識: 如果數據存儲在CPU寄存器,需要0個時鐘周期就能訪問到,存儲在高速緩存中需要4~75個時鐘周期。如果存儲在主存需要上百個周期,而如果存儲在磁盤上,大約需要幾千萬個周期! -- 出自 CSAPP 接下來一起深入了解下計算機系統涉及的幾個存儲設備: 隨機訪問存儲器 隨機訪問存儲器(RAM)分為靜態RAM (SRAM) 和動態RAM(DRAM)。SRAM的速度更快,但也貴很多,一般不會超過幾兆字節,通常用來做告訴緩存存儲器。DRAM就是就是我們常說的主存。 訪問主存 數據流是通過操作系統中的總線的共享电子電路在處理器和DRAM之間來來回回。每次CPU和主存之間的數據傳送都是通過一系列複雜的步驟完成,這些步驟成為總線事務。讀事務是將主存傳送數據到CPU。寫事務從CPU傳送數據到主存。 總線是一組并行的導線,能攜帶地址、數據和控制信號。下圖展示了CPU芯片是如何與主存DRAM連接的。 那麼我們在加載數據和存儲數據時,CPU和主存到底是怎樣交互實現的呢? 首先來看一個基本指令,加載內存數據到CPU寄存器中: movq A,%rax 將地址A的內容加載到寄存器%rax中,這個命令會使CPU芯片上稱為總線接口(bus interface)的電路在總線上發起讀事務,具體分為三個步驟: CPU將地址A放到系統總線上,I/O橋將信號傳遞到內存總線。詳情看下下圖a 主存感覺到內存總線上的地址信號,從內存總線讀地址,從DRAM取出數據字,將其寫到內存總線。I/O橋將內存總線信號翻譯成系統總線信號,沿着系統總線傳遞到CPU總線接口。下圖b CPU感覺到系統總線上的數據,從總線上讀數據,並將數據複製到寄存器%rax...

2016年電動車和插電式混合動力車銷量預計將超過70萬輛

中汽協日前預測,2016年全國電動汽車和插電式混合動力車的銷量預計將超過70萬輛,較2015年的銷量增長一倍。 2015年電動車和插電式混合動力車的合併銷量為331092輛,較2014年增長了340%。其中包括247482輛電動車和83610輛插電式混合動力車,在24萬輛多的電動汽車銷量中,包括146719輛乘用車,另有100763輛為商用車。插電式混合動力車的銷量中,60663輛為乘用車,22947輛為商用車。 根據2015年起草的藍圖,政府計畫到2020年在全國範圍內新建12000個充電站和480枚充電樁。2014年年底,全國共有780個充電站共31000枚充電樁。2015年政府還為27個省市自治區設定了電動車的最低銷量目標。 政府預計,這些措施到位後,自主品牌車企的電動車和插電式混合動力車銷量到2020年可達100萬輛,到2025年可達300萬輛。 本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理 【其他文章推薦】 ※為什麼 USB CONNECTOR 是電子產業重要的元件? ※ 網頁設計 一頭霧水??該從何著手呢? 找到專業技術的 網頁設計公司 ,幫您輕鬆架站! ※想要讓你的商品成為最夯、最多人討論的話題? 網頁設計公司 讓你強力曝光 ※想知道最厲害的 台北網頁設計公司推薦 、 台中網頁設計公司推薦 專業設計師"嚨底家"!! Orignal From: 2016年電動車和插電式混合動力車銷量預計將超過70萬輛