对LRU算法的理解和应用场景
生活随笔
收集整理的這篇文章主要介紹了
对LRU算法的理解和应用场景
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景
最近沒事看公司自研ssr框架feb,注意到里面頁面級緩存和組件級緩存用到了LRU緩存,這讓我想起了之前看keep-alive源碼,貌似也是使用了LRU緩存。之前看過redis的文章,好像也是基于這個理念實現的;在刷leetcode的時候,有時候也會碰到類似LRU的題目。今天記錄一下LRU算法,加深我們對這塊的印象。
研究
LRU (Least recently used:最近最少使用)最近被訪問的,被訪問的幾率變大。最少被訪問的,當磁盤被寫滿時,會被清除。
一張圖來理解一下:
算法實現
class LRUCache {// 存儲數據put (key, value) {if (this.cache[key]) {// 如果該 key 之前存在,將 key 重新激活this.active(key)this.cache[key] = value// 而且此時緩存的長度不會發生變化// 所以不需要進行后續的長度判斷,可以直接返回return} ?// 存儲之前需要先判斷長度是否達到上限if (this.list.length >= this.capacity) {// 由于每次存儲后,都會將 key 放入 list 最后,// 所以,需要取出第一個 key,并刪除cache中的數據。const latest = this.list.shift()delete this.cache[latest]}// 寫入緩存this.cache[key] = value// 寫入緩存后,需要將 key 放入 list 的最后this.list.push(key)} }總結
以上是生活随笔為你收集整理的对LRU算法的理解和应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp的数据库操作(上)
- 下一篇: 四月的“绝配”热点推荐 | 美通社公关传