怎么用Go语言实现LRU Cache
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,小编给大家分享一下怎么用Go语言实现LRU Cache,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1 基本概念LRU是一个老生常谈的问题,即最近最少使用,LRU是Least Rec
千家信息网最后更新 2025年11月07日怎么用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安全错误
数据库的锁怎样保障安全
济南科创互联网络科技伍少杰
数据库恢复挂起状态怎么处理
网络安全知识答题 大学
数据库出现的问题及解决办法
pb 与sql数据库编程入门
江苏戴尔服务器虚拟主机
根镜像服务器哪些国家有
北京小程序软件开发机构
飞船降落到海平面找到数据库
中国网络安全法检测评估多久一次
网络安全法禁黄
河南手机软件开发平台
宁畅服务器技术白皮书
工业服务器散热
李春葆数据库pdf
ftp服务器的安全设置
2020年山西网络安全
mc网易版服务器能设密码吗
关于软件开发的标准化
北京网络安全培训有哪些
数据库包含
济南科创互联网络科技伍少杰
西安匞之作网络技术有限公司
青浦区专业软件开发产品介绍
失落的方舟北美西部服务器
维护网络安全教育视频
泛微oa底层数据库
数据库学生表外键约束
河南手机软件开发平台
网络安全宣传周四招