好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang實現LRU緩存淘汰算法的示例代碼

golang實現LRU緩存淘汰算法的示例代碼

熱門標簽:中國地圖標注省會高清 高德地圖標注口訣 江西轉化率高的羿智云外呼系統 西部云谷一期地圖標注 地圖標注的汽車標 南通如皋申請開通400電話 廣州呼叫中心外呼系統 學海導航地圖標注 浙江高速公路地圖標注

LRU緩存淘汰算法

LRU是最近最少使用策略的縮寫,是根據數據的歷史訪問記錄來進行淘汰數據,其核心思想是“如果數據最近被訪問過,那么將來被訪問的幾率也更高”。

雙向鏈表實現LRU

將Cache的所有位置都用雙鏈表連接起來,當一個位置被訪問(get/put)之后,通過調整鏈表的指向,將該位置調整到鏈表頭的位置,新加入的Cache直接加到鏈表頭中。

這樣,在多次操作后,最近被訪問(get/put)的,就會被向鏈表頭方向移動,而沒有訪問的,向鏈表后方移動,鏈表尾則表示最近最少使用的Cache。

當達到緩存容量上限時,鏈表的最后位置就是最少被訪問的Cache,我們只需要刪除鏈表最后的Cache便可繼續添加新的Cache。

代碼實現

type Node struct {
  Key int
  Value int
  pre *Node
  next *Node
}

type LRUCache struct {
  limit int
  HashMap map[int]*Node
  head *Node
  end *Node
}

func Constructor(capacity int) LRUCache{
  lruCache := LRUCache{limit:capacity}
  lruCache.HashMap = make(map[int]*Node, capacity)
  return lruCache
}

func (l *LRUCache) Get(key int) int {
  if v,ok:= l.HashMap[key];ok {
    l.refreshNode(v)
    return v.Value
  }else {
    return -1
  }
}

func (l *LRUCache) Put(key int, value int) {
  if v,ok := l.HashMap[key];!ok{
    if len(l.HashMap) >= l.limit{
      oldKey := l.removeNode(l.head)
      delete(l.HashMap, oldKey)
    }
    node := Node{Key:key, Value:value}
    l.addNode(node)
    l.HashMap[key] = node
  }else {
    v.Value = value
    l.refreshNode(v)
  }
}

func (l *LRUCache) refreshNode(node *Node){
  if node == l.end {
    return
  }
  l.removeNode(node)
  l.addNode(node)
}

func (l *LRUCache) removeNode(node *Node) int{
  if node == l.end {
    l.end = l.end.pre
  }else if node == l.head {
    l.head = l.head.next
  }else {
    node.pre.next = node.next
    node.next.pre = node.pre
  }
  return node.Key
}

func (l *LRUCache) addNode(node *Node){
  if l.end != nil {
    l.end.next = node
    node.pre = l.end
    node.next = nil
  }
  l.end = node
  if l.head == nil {
    l.head = node
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • java LRU算法介紹與用法示例
  • 工程師必須了解的LRU緩存淘汰算法以及python實現過程
  • JS 實現緩存算法的示例(FIFO/LRU)
  • Nodejs基于LRU算法實現的緩存處理操作示例
  • c++實現的常見緩存算法和LRU
  • Android圖片緩存之Lru算法(二)
  • Python實現LRU算法的2種方法
  • JAVA實現LRU算法的參考示例

標簽:東營 吐魯番 貴州 保定 德宏 許昌 曲靖 常州

巨人網絡通訊聲明:本文標題《golang實現LRU緩存淘汰算法的示例代碼》,本文關鍵詞  golang,實現,LRU,緩存,淘汰,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang實現LRU緩存淘汰算法的示例代碼》相關的同類信息!
  • 本頁收集關于golang實現LRU緩存淘汰算法的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 罗峰与七个师姐的小说下载| 啊用力啊快点啊在线播放| 女性私密部位粉嫩| 精品成a人无码亚洲成a金钱| 欧美特黄a在线播放| 国产成人a毛片在线| 小可叫我喝她的奶水| 國產精品久久蜜桃天美精東 | 免费大片a一级一级| SweetFox欧美在线观看| silk024中文字幕无删减| 日本公妇被公侵犯中文字幕2| 国产精品对白一区二区三区| 91香蕉污| xx69xx18一50hd| 好爽?好紧?女攻男受| 91码无精品秘?入口九色| 库伦旗| 爸爸的好儿子在线观看免费喜剧| 3D肉动漫无修版在线播放| 三极片黄色| 中国精品18videosex性中国| 国产欧美一区二区精品性色超碰| 日本大尺度爱做网站| 欧美色-情-伦-理一区二色戒| 搞逼视频软件| 黄色免费看软件| 国产超碰精久久久无码牛AV | 娱乐至上by一条大咸鱼| 小扒开腿挺进肉蒂抽搐喷潮小说| 手机看片1028| 黑黑的长长的硬硬的是什么| 国产a不卡片精品免费观看| 学生16女人毛A级毛片国外电影| 韩国理论三级在线观看视频| 抖抈APP| 日日摸天天添天天添破| 中国女兵一级特黄大片| jzjzjzcom老师水多免费| 辞职后我爆红全宇宙[快穿]| 亚洲欧美91|