成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Redis刪除策略和逐出策略是什么

這篇文章主要介紹了redis刪除策略和逐出策略是什么,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

為澤州等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及澤州網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站設計制作、做網(wǎng)站、澤州網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

過期數(shù)據(jù)

先來看三個key值,分別為sex、name、age。

這三個值設置的指令為 set name kaka setex age 100 24 setex sex 10 1

Redis刪除策略和逐出策略是什么在redis中我們可以使用ttl來獲取某個key的狀態(tài),下面我們來使用ttl分別獲取一下上邊name、age、sex的狀態(tài)

可以看到出來了三個值,分別為 -1  775   -2

那么這三個值給出的信息是什么呢!

  • -1 表示永久有效的數(shù)據(jù)
  • 775 這個值是設置在age上,使用的指令為setex age 1000 24,表示為剩余有效時間
  • -2 表示已經(jīng)過期的數(shù)據(jù),或者是被刪除的數(shù)據(jù),或者說是么有定義的數(shù)據(jù)Redis刪除策略和逐出策略是什么

過期數(shù)據(jù)的存儲結(jié)構(gòu)

  • 當我們設置一個帶有時效性的name時,redis存儲的是一個內(nèi)存地址0x10101
  • 然后redis會再開辟一個空間用來存儲帶有時效性的key
  • 但是存儲方式是key對應的內(nèi)存地址  和  過期時間Redis刪除策略和逐出策略是什么那么今天我們所說的redis刪除策略,就是刪除的這部分數(shù)據(jù)。

定時刪除

定時刪除就是寫一個定時器,然后當key的時間過期后,定時器任務立即對過期的key進行刪除

優(yōu)點:可想而知key到期就刪,肯定對內(nèi)存時最友好的,節(jié)約內(nèi)存

缺點:redis單線程的特性是所有的命令都在按照一定的順序進行執(zhí)行。key值到期就刪cpu的壓力就會變大,會直接影響到redis服務器響應時間和IO

定時刪除就是用時間來換取空間

當執(zhí)行完定時刪除后,key值對應的數(shù)據(jù)會被刪除,同時在過期的內(nèi)存區(qū)里邊也會直接刪除。Redis刪除策略和逐出策略是什么

惰性刪除

在來看這個圖當key值過期后不會直接刪除,那是什么時候刪除呢!繼續(xù)往下看Redis刪除策略和逐出策略是什么

當我們使用惰性刪除時,數(shù)據(jù)到期了也不會自動刪除,那么他的刪除方式是,在下一次在獲取這個key值時,會做一個判斷,判斷這個key是否過期,如果過期了在執(zhí)行刪除。

也就是說當再次執(zhí)行g(shù)et name時  會走一個函數(shù)expirelfNeeded()  這個函數(shù)就是判斷此key是否過期的。過期的返回nil,然后從內(nèi)存在進行刪除

Redis刪除策略和逐出策略是什么優(yōu)點:會減少一定的CPU性能,只有到必須要刪的時候才會刪除

缺點:那肯定就是內(nèi)存壓力大了,例如一些熱點新聞,熱點過了就基本沒人訪問了,沒有人訪問這個key就一直存在,就會出現(xiàn)長期占用一定的內(nèi)存空間

也就說這種方式是用空間換時間

定期刪除

在上文中我們提及了倆種刪除方式,一種是定時刪除,一種是惰性刪除。一個是用空間換時間。一個是用時間換空間。倆種方案都是比較極端的方式。那么接下來我們在來看看定期刪除的實現(xiàn)方案。

先來看一下redis的存儲空間,一共有默認為16個,在redis.conf里邊有一個配置參數(shù)database這個參數(shù)控制的。每個數(shù)據(jù)庫都有自己的過期分區(qū),里邊存儲就是數(shù)據(jù)地址  和  數(shù)據(jù)過期時間。

Redis刪除策略和逐出策略是什么實現(xiàn)方式

redis在啟動時,會取讀取server下的hz的值,默認為10。這個值直接在終端使用info server就可以查看的到

Redis刪除策略和逐出策略是什么然后會每秒鐘執(zhí)行server下hz次  進行serverCron()輪詢

繼續(xù)使用databasesCron對redis的16個庫進行挨個訪問信息

訪問時候會再執(zhí)行activeExpireCycel對每個expires[*]逐一進行檢測,每個執(zhí)行的時間為250ms / server hz這個參數(shù)

在對每個expirs[*]逐一檢測時,會隨機拿出ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC個可以進行檢測

  • 如果key超時,直接刪除key
  • 一輪中刪除的key數(shù)量>ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC*25%繼續(xù)循環(huán)該過程
  • 如果一輪中刪除的key數(shù)量<=ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC25% ,檢查下一個expires[]

那么現(xiàn)在問題來了,我們的250ms / hz這個時間執(zhí)行完了,但是把expires的16個數(shù)據(jù)庫沒有循環(huán)完怎么辦呢!  下次來在循環(huán)那個庫呢!  其實這個值是有存的,就是current_db這個值。這個值會記錄activeExpireCycel 下次進入那個expires[*]執(zhí)行Redis刪除策略和逐出策略是什么特點1:CPU使用沒有高峰值,檢測頻率自定義設置

特點2:內(nèi)存壓力不會很大, 長時間占用的內(nèi)存會被持續(xù)的清理

逐出算法

在上文中我們說了三種刪除策略,但是這三種策略都是相對于設置了有效期的key才會有效。

那現(xiàn)在我們的redis使用的內(nèi)存不足了,就會使用逐出策略來保證redis的正常使用。

redis在每次執(zhí)行命令前會調(diào)用freeMemorylfNeeded()檢測內(nèi)存是否充足,當不充足時就會清理一些key,這種清除數(shù)據(jù)的策略稱為逐出策略。

redis最大可使用內(nèi)存的參數(shù)為:maxmemory  默認為0   指的是占用物理內(nèi)存的比例   一般設置50%就可以了

每次選取待刪除key的個數(shù):maxmemory-samples

刪除策略:maxmemory-policy

「下面我們來著重說明刪除策略」

  • 檢測易失數(shù)據(jù)(也就是我們設置了有效期,但是還沒有到期的數(shù)據(jù),就是上文expires[*])
    • volatile-lru:挑選最近少使用的數(shù)據(jù)
    • volatile-lfu:挑選最近使用次數(shù)最少的數(shù)據(jù)
    • volatile-ttl:挑選將要淘汰的數(shù)據(jù)
    • volatile-random:隨機選擇

接下來看一幅圖

  • 9s就是現(xiàn)在的時間

  • 距離9s最長的一個key就是age

  • 使用次數(shù)最少的就是gender這個key

  • 如果按照volatile-lru就會把age刪除掉

  • 如果按照volatile-lfu就會把gender刪除掉Redis刪除策略和逐出策略是什么

  • 檢測全部數(shù)據(jù)

    • allkeys-lru:挑選最近少使用的數(shù)據(jù)
    • allkeys-lfu:挑選最近使用次數(shù)最少的數(shù)據(jù)
    • allkeys-random:全庫隨機刪除
  • 放棄數(shù)據(jù)驅(qū)逐

    • no-enviction  : 數(shù)據(jù)不會進行任何的刪除,直到內(nèi)存用完,引發(fā)oom錯誤。

感謝你能夠認真閱讀完這篇文章,希望小編分享Redis刪除策略和逐出策略是什么內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細的解決方法等著你來學習!

網(wǎng)頁名稱:Redis刪除策略和逐出策略是什么
網(wǎng)頁鏈接:http://jinyejixie.com/article30/ijgeso.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、ChatGPT、服務器托管、網(wǎng)站策劃響應式網(wǎng)站、品牌網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
保山市| 观塘区| 乐都县| 石门县| 澎湖县| 抚宁县| 黔南| 石泉县| 旺苍县| 临颍县| 沽源县| 凭祥市| 濉溪县| 景泰县| 澄江县| 响水县| 旬邑县| 隆尧县| 枣庄市| 青河县| 五常市| 湖北省| 任丘市| 多伦县| 厦门市| 天台县| 沾化县| 华蓥市| 阜康市| 敖汉旗| 综艺| 晋州市| 游戏| 横山县| 岳池县| 嘉鱼县| 九台市| 焉耆| 平和县| 青冈县| 平安县|