怎么用Go语言实现LRU Cache
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下怎么用Go语言实现LRU Cache,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1 基本概念LRU是一个老生常谈的问题,即最近最少使用,LRU是Least Rec
千家信息网最后更新 2026年10月31日怎么用Go语言实现LRU Cache
小编给大家分享一下怎么用Go语言实现LRU Cache,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
1 基本概念
LRU是一个老生常谈的问题,即最近最少使用,LRU是Least Recently Used的缩写,是一种操作系统中常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
实现LRU基本的数据结构:Map+LinkedList

一般规则:
添加数据时,将新增数据节点放在头指针,尾结点部分大于最大长度时删除。
删除数据时,先按照Map的规则进行查找,再根据链表规则进行删除。
查找数据时,按照
Map进行查找,没有则返回空,有则返回该数据的值并移动到头节点。
2 代码实现
package mainimport "fmt"var head *Nodevar end *Nodetype Node struct { Key string Value string pre *Node next *Node}func (n *Node) Init(key string, value string) { n.Key = key n.Value = value}type LRUCache struct { Capacity int //页面初始化大小 Size int //页面实际大小 Map map[string]*Node //具体的cache}func GetLRUCache(capacity int) *LRUCache { lruCache := LRUCache{Capacity: capacity} lruCache.Map = make(map[string]*Node, capacity) return &lruCache}func (l *LRUCache) get(key string) string { if v, ok := l.Map[key]; ok { l.refreshNode(v) return v.Value } else { return "null" }}func (l *LRUCache) put(key, value string) { if v, ok := l.Map[key]; !ok { if len(l.Map) >= l.Capacity { oldKey := l.removeNode(head) delete(l.Map, oldKey) } node := Node{Key: key, Value: value} l.addNode(&node) l.Map[key] = &node } else { v.Value = value l.refreshNode(v) }}func (l *LRUCache) refreshNode(node *Node) { if node == end { return } l.removeNode(node) l.addNode(node)}func (l *LRUCache) removeNode(node *Node) string { if node == end { end = end.pre } else if node == head { head = head.next } else { node.pre.next = node.next node.next.pre = node.pre } return node.Key}func (l *LRUCache) addNode(node *Node) { if end != nil { end.next = node node.pre = end node.next = nil } end = node if head == nil { head = node }}3 测试使用
func main() { lruCache := GetLRUCache(3) lruCache.put("001", "1") lruCache.put("002", "2") lruCache.put("003", "3") lruCache.put("004", "4") lruCache.put("005", "5") lruCache.get("002") fmt.Println(lruCache.get("001")) fmt.Println(lruCache.get("002")) fmt.Print(lruCache.Map)}看完了这篇文章,相信你对"怎么用Go语言实现LRU Cache"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
页面
数据
规则
语言
最大
大小
算法
篇文章
节点
选择
老生常谈
操作系统
代码
字段
完了
实际
常用
指针
数据结构
时间
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
河南云网互联网络科技有限公司
互联网属科技
互联网品科技
互联网 科技公司
深圳科技互联网
互联网医疗科技
互联网的科技创新
远信互联网科技
奇酷互联网络科技公司
互联网科技缩写
移动互联网科技股
赶超互联网科技 微信多开
互联网科技融合创新
互联网硬科技公司
互联网科技新闻
互联网科技收购价值
瑞安市蟠桃会互联网科技有限公司
科技互联网企业在行动
知域互联网科技有限公司官网
武汉亿视互联网科技有限公司
蓝思科技飞鸽互联网
科技创新与互联网经济
互联网科技股票
互联网科技博客
北京华百购互联网科技有限公司
福建科技产业互联网发展
伊宁互联网科技做什么的
互联网科技资金流入
版纳互联网科技选哪家
上海旺乐尼互联网科技有限公司