redis LRU LFU FIFO演算法總結

2021-10-22 23:09:02 字數 1019 閱讀 9531

(1)fifo:first in first out,先進先出

(2)lru:least recently used,最近最少使用

(3)lfu:least frequently used,最不經常使用

fifo表示先進先出,類似於對列,在資料的結構上使用對列來實現。

結構圖:

1. 新訪問的資料插入fifo佇列尾部,資料在fifo佇列中順序移動;

2. 淘汰fifo佇列頭部的資料;

lru表示很少使用演算法,其核心思想是「如果資料最近被訪問過,那麼將來被訪問的機率也更高」。

最常見的實現是使用乙個鍊錶儲存快取資料,結構圖如下:

mzj補充:之所以選擇鍊錶的結構,而不是陣列或者佇列,是因為根據lru演算法的需要,需要將新加入資料插入頭部、被訪問資料移動到頭部,在鍊錶中,元素的插入刪除快、鍊錶中元素的移動快(均通過直接改變元素前後引用即可)

1. 新資料插入到鍊錶頭部;

2. 每當快取命中(即快取資料被訪問),則將資料移到鍊錶頭部;

3. 當鍊表滿的時候,將鍊錶尾部的資料丟棄。

lru和lfu的區別:

lfu演算法是根據在一段時間裡資料項被使用的次數選擇出最少使用的資料項,即根據使用次數的差異來決定。而lru是根據使用時間的差異來決定的。

lfu表示最不經常使用的演算法,其核心思想是「如果資料過去被訪問多次,那麼將來被訪問的頻率也更高」。

結構圖:

1. 新加入資料插入到佇列尾部(因為引用計數為1);

2. 佇列中的資料被訪問後,引用計數增加,佇列重新排序;

3. 當需要淘汰資料時,將已經排序的列表最後的資料塊刪除

(二)演算法 排序演算法總概

有兩種思想,就像是擺放在天鵝絨上的寶石那樣褶褶生輝,乙個是微積分,另乙個就是演算法。微積分以及在微積分基礎上建立起來的數學分析體系造就了現代科學,而演算法則造就了現在世界。大衛 柏林斯基 1 什麼是演算法?algorithm 演算法 是一系列解決問題的明確指令,也就是說,對於符合一定規範的輸入,能夠...

分頁的總頁數演算法

總記錄數 totalrecord 每頁最大記錄數 pagesize 演算法一 獲取總頁數 總條數 每頁最大記錄數 public static int gettotalpage int totalrecord,int pagesize view code 獲取總頁數 總條數 每頁最大記錄數 publi...

秋招準備 演算法 排序(總)

1.ques 簡單介紹選擇排序 選擇排序通過在每一輪迴圈中選擇出極值,然後將之與未排序好區域的某個端點作交換,完成一次排序。比如,第一輪選出最小值,此時的未排序區是0 n 1,則將這個最小值與0號陣列元素作交換,完成排序,以此類推,外迴圈n次之後完成排序。中間變數 儲存每次排序最小值的temp,最小...