iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么用Go语言实现LRU Cache
  • 179
分享到

怎么用Go语言实现LRU Cache

2023-06-29 09:06:46 179人浏览 安东尼
摘要

小编给大家分享一下怎么用Go语言实现LRU Cache,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1 基本概念LRU是一个老生常谈的问题,即最近最少使用,LRU是Least Recently Used的缩写,是

小编给大家分享一下怎么用Go语言实现LRU Cache,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1 基本概念

LRU是一个老生常谈的问题,即最近最少使用,LRU是Least Recently Used的缩写,是一种操作系统中常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。

实现LRU基本的数据结构Map+LinkedList

怎么用Go语言实现LRU Cache

一般规则:

  • 添加数据时,将新增数据节点放在头指针,尾结点部分大于最大长度时删除。

  • 删除数据时,先按照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”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么用Go语言实现LRU Cache

本文链接: https://www.lsjlt.com/news/324103.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Go语言实现LRU Cache
    小编给大家分享一下怎么用Go语言实现LRU Cache,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1 基本概念LRU是一个老生常谈的问题,即最近最少使用,LRU是Least Recently Used的缩写,是...
    99+
    2023-06-29
  • 如何利用Go语言实现LRU Cache
    目录1 基本概念2 代码实现3 测试使用1 基本概念 LRU是一个老生常谈的问题,即最近最少使用,LRU是Least Recently Used的缩写,是一种操作系统中常用的页面置换...
    99+
    2024-04-02
  • Go语言实现LRU算法的核心思想和实现过程
    目录GO实现Redis的LRU例子1.FIFO/LFU/LRU算法简介2.LRU算法实现2.1核心数据结构2.2查找功能2.3删除2.4新增或修改GO实现Redis的LRU例子 常见...
    99+
    2023-05-20
    Go LRU算法 GoLang LRU算法
  • Go语言如何实现LRU算法的核心思想和实现过程
    这篇文章主要介绍了Go语言如何实现LRU算法的核心思想和实现过程,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。GO实现Redis的LRU例子常见的三种缓存淘汰算法有三种:FIFO,LRU和LFU实现LRU缓存淘汰算法1....
    99+
    2023-07-06
  • 怎么使用Go语言实现Spark
    这篇文章主要介绍了怎么使用Go语言实现Spark的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Go语言实现Spark文章都会有所收获,下面我们一起来看看吧。为什么使用Go语言实现SparkGo语言的成长...
    99+
    2023-07-06
  • C语言实现页面置换算法(FIFO、LRU)
    目录1.实现效果2.实现源代码 1.实现效果 2.实现源代码  #include<iostream> #include<process.h> #inc...
    99+
    2024-04-02
  • 怎么使用Go语言实现Ping工具
    这篇文章主要讲解了“怎么使用Go语言实现Ping工具”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Go语言实现Ping工具”吧!Ping是一种众所周知的网络诊断工具,它通过向目标服务...
    99+
    2023-07-06
  • 怎么使用Go语言实现时间轮
    本文小编为大家详细介绍“怎么使用Go语言实现时间轮”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Go语言实现时间轮”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。时间轮概述时间轮是一种基于时间概念的循环缓...
    99+
    2023-07-05
  • Go语言怎么实现stop the world
    本篇内容主要讲解“Go语言怎么实现stop the world”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言怎么实现stop the world”吧!停止世界(Stop the worl...
    99+
    2023-06-16
  • Go语言怎么实现JSON解析
    这篇文章主要介绍“Go语言怎么实现JSON解析”,在日常操作中,相信很多人在Go语言怎么实现JSON解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言怎么实现JSON解析”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • go语言堆排序怎么实现
    Go语言堆排序的实现步骤如下: 首先,定义一个用于进行堆调整的函数 adjustHeap,该函数接受三个参数:待调整的切片 arr...
    99+
    2023-10-22
    go语言
  • Go语言怎么实现CGO编程
    本文小编为大家详细介绍“Go语言怎么实现CGO编程”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言怎么实现CGO编程”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。基于 C 标准库实现最简单的 CGO 程序...
    99+
    2023-07-05
  • go语言多线程怎么实现
    在Go语言中,可以使用goroutine来实现多线程。goroutine是Go语言中的轻量级线程,可以同时运行在一个操作系统线程上。...
    99+
    2023-10-21
    go语言
  • go语言使用什么实现的
    go语言使用称为Go Runtime的虚拟机实现的。Go语言的虚拟机是由C语言实现的,它负责Go程序的运行和管理,这个虚拟机可以在不同的操作系统上运行,包括Linux、Windows、macOS等,还提供了垃圾回收机制,可以自动管理内存,减...
    99+
    2023-07-10
  • 使用go语言怎么实现数组比较
    这篇文章给大家介绍使用go语言怎么实现数组比较,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。比较两个数组是否相等如果两个数组类型相同(包括数组的长度,数组中元素的类型)的情况下,我们可以直接通过较运算符(==和!=)来...
    99+
    2023-06-15
  • go语言心跳超时怎么实现
    这篇文章主要介绍了go语言心跳超时怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言心跳超时怎么实现文章都会有所收获,下面我们一起来看看吧。一、背景本文描述的是客户端接收心跳信息的超时实现。心跳超时...
    99+
    2023-06-30
  • go语言怎么实现屏幕截图
    今天小编给大家分享一下go语言怎么实现屏幕截图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。借助第三方库安装go ...
    99+
    2023-06-30
  • go语言数组怎么实现队列
    在Go语言中,可以使用切片来实现队列。 首先,定义一个结构体来表示队列: type Queue struct { items...
    99+
    2024-02-29
    go语言
  • Go语言单例模式怎么实现
    这篇文章主要介绍“Go语言单例模式怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言单例模式怎么实现”文章能帮助大家解决问题。什么是单例模式单例模式指仅允许创建一个对象的设计模式。它通常...
    99+
    2023-07-05
  • go语言怎么调用c语言
    Go语言可以通过使用cgo工具以及一些特定的语法来调用C语言代码。 以下是调用C语言的Go代码示例: 创建一个名为 `callc....
    99+
    2023-10-27
    go语言 c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作