JavaScript算法實現——緩存

JavaScript算法實現——緩存

FIFO

最簡單的一種緩存算法,設置緩存上限,當達到了緩存上限的時候,按照先進先出的策略進行淘汰,再增加進新的k-v。

使用了一個對象作為緩存,一個數組配合著記錄添加進對象時的順序,判斷是否到達上限,若到達上限取數組中的第一個元素key,對應刪除對象中的鍵值。

JavaScript算法實現——緩存

LRU

LRU(Leastrecentlyused,最近最少使用)算法。該算法的觀點是,最近被訪問的數據那麼它將來訪問的概率就大,緩存滿的時候,優先淘汰最無人問津者

算法實現思路:基於一個雙鏈表的數據結構,在沒有滿員的情況下,新來的k-v放在鏈表的頭部,以後每次獲取緩存中的k-v時就將該k-v移到最前面,緩存滿的時候優先淘汰末尾的。

雙向鏈表的特點,具有頭尾指針,每個節點都有prev(前驅)和next(後繼)指針分別指向他的前一個和後一個節點。

關鍵點:在雙鏈表的插入過程中要注意順序問題,一定是在保持鏈表不斷的情況下先處理指針,最後才將原頭指針指向新插入的元素,在代碼的實現中請注意看我在註釋中說明的順序注意點!

JavaScript算法實現——緩存

具體的思路就是如果所要get的節點不是頭結點(即已經是最近使用的節點了,不需要移動節點位置)要先進行平滑的斷鏈操作,處理好指針指向的關係,拿出需要移動到最前面的節點,進行鏈表的插入操作。

JavaScript算法實現——緩存


分享到:


相關文章: