<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redis 刪除、淘汰策略

          共 1579字,需瀏覽 4分鐘

           ·

          2021-07-05 16:15

          Redis 刪除策略

          當(dāng)有 key 設(shè)置了過期時間,就會有刪除策略

          • 定時刪除

          以 CPU 定時執(zhí)行的方式換 Redis 內(nèi)存(因為會使用輪詢的方式一直耗用 CPU 資源),及時性不高,但是內(nèi)存不會浪費

          • 惰性刪除

          在 get 的時候,先判斷 key 是否會過期,如果過期了,會進行刪除,會導(dǎo)致有大量的垃圾數(shù)據(jù)占用內(nèi)存空間(因為過期的數(shù)據(jù)在沒有進行 get 時,就會一直存在)

          • 定期刪除

          hz 10
          1. 在 Redis 啟動的時候讀取配置文件 hz 的值,默認(rèn)為 10

          2. 每秒執(zhí)行 hz 次,

          1. 每次執(zhí)行會一次執(zhí)行:serverCron() --> databaseCron() --> activeExpireCyle() 三個函數(shù)

          1. activeExpireCyle() 對每個 expires[*] (過期庫,* 代表對應(yīng)的數(shù)據(jù)庫,一共 0~15 個,每一個過期庫都會和 Redis 的數(shù)據(jù)庫對應(yīng))進行逐一檢查,每次執(zhí)行 250ms/hz,默認(rèn)情況就是 25ms

          2. 對某個 expires[ * ] 檢測時,隨機挑選 N(默認(rèn) 20)個 key 檢查

          1. 如果 key 超時,刪除 key

          2. 如果一輪中刪除的 key 的數(shù)量 > N * 25%,循環(huán)該過程

          3. 如果一輪中刪除的 key 的數(shù)量 < N * 25%,檢查下一個 expires[ * ]

          current_db 用于記錄 activeExpireCyle() 進入哪一個 expire[ * ] 執(zhí)行,如果時間到了,那么下次根據(jù) current_db 繼續(xù)執(zhí)行

          Reids采用的是惰性刪除 + 定期刪除兩種策略結(jié)合使用。


          Redis 淘汰策略

          當(dāng) Redis 內(nèi)存滿了,在進行 set 的時候,就會觸發(fā)淘汰策略

          • 逐出算法

          LRU(Least recently used):最近最少使用,針對時間

          LFU(Least frequently used):最近最不頻繁使用,針對訪問次數(shù)

          • maxmemory:最大可使用內(nèi)存,占用物理內(nèi)存的比例,默認(rèn)為 0,表示不限制,生產(chǎn)環(huán)境一般根據(jù)需求設(shè)置,通常在 50 以上

          • maxmemory-policy:達到最大內(nèi)存后,對挑選出來的數(shù)據(jù)進行刪除策略(volatile:針對過期數(shù)據(jù)的策略,allkeys:針對所有數(shù)據(jù)的策略)

          • volatile-lru:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選最長時間沒有使用的數(shù)據(jù)(推薦)

          • allkeys-lru:從數(shù)據(jù)集(server.db[i].dict)中挑選最長時間沒有使用的數(shù)據(jù)淘汰

          • volatile-ttl:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選將要過期的數(shù)據(jù)淘汰(推薦)

          • volatile-lfu:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選最近使用次數(shù)最少的數(shù)據(jù)淘汰

          • allkeys-lfu:從數(shù)據(jù)集(server.db[i].dict)中挑選最近使用次數(shù)最少的數(shù)據(jù)淘汰

          • volatile-random:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中隨機挑選數(shù)據(jù)淘汰

          • allkeys-random:從數(shù)據(jù)集(server.db[i].dict)中隨機挑選數(shù)據(jù)淘汰

          • noeviction:驅(qū)逐,禁止驅(qū)逐數(shù)據(jù)(默認(rèn)策略)

          • maxmemory-sample:每次選取待刪除的數(shù)據(jù)個數(shù),選取數(shù)據(jù)時并不會進行全表掃描,采用隨機獲取數(shù)據(jù)的方式作為待檢測刪除數(shù)據(jù),默認(rèn)選擇 5 個樣本進行檢測

          喜歡,在看


          瀏覽 34
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  啊v视频在线 | 天天久久天堂 | 激情小说一区 | 国产精品久久久久久爽爽爽麻豆色哟哟 | 国产V综合V |