1. 概念
    LRU : 最近最少使用算法

  2. 代码

<?php
class Node
{public $preKey = null; //链表前一个节点public $nextKey = null;  //链表后一个节点public $key= null;      //当前的值public $value= null;    //当前keypublic function __construct($key,$value){$this->key = $key;$this->value = $value;}public function setPre($preKey){$this->preKey = $preKey;}public function setNext($nextKey){$this->nextKey = $nextKey;}
}class LRUCache{public $cacheTable = [];/** Node null  */private $headNode = null;private $lastNode = null;private $cacheCount = 0;private $cacheMax = 3;public function addNode($key,$value)  //此处采用头插法{$addNode = new Node($key,$value);if ( !empty($this->headNode)){$this->headNode->preKey = $addNode; //如果链表存在,将节点添加到节点前一个}$addNode->nextKey = $this->headNode;//第一次保存最后一个节点为头结点if ($this->lastNode == null){$this->lastNode = $addNode;}$this->headNode = $addNode;$this->cacheTable[$key] = $addNode;$this->cacheCount++;}public function set($key,$value){//先判断是否需要删除$this->shiftNode();$this->addNode($key,$value);return true;}//自动删除public function shiftNode(){while ($this->cacheCount >= $this->cacheMax){if (!empty($this->lastNode)){if ($this->lastNode->preKey){$this->lastNode->preKey->nextKey = null;$this->lastNode = $this->lastNode->preKey;}unset($this->cacheTable[$this->lastNode->key]);}$this->cacheCount --;}}public function dumpAllData(){$node = $this->headNode;while (($node)){echo "key=".$node->key."value=".$node->value."\n";$node = $node->nextKey;}}}$Cache = new LRUCache();
$Cache->set("a","aaaaaaaaaaa");
$Cache->set("b","bbbbbbbbbbb");
$Cache->set("c","ccccccccccc");
$Cache->set("d","dddddddddddd");
$Cache->set("e","eeeeeeeeeeee");
//$Cache->set("f","ffffffffffff");
$Cache->dumpAllData();
//var_dump($Cache);  //是一个深度的数组(对象)
  1. 结果
[root@VM-16-13-centos ~]# php LRU.php
key=evalue=eeeeeeeeeeee
key=dvalue=dddddddddddd
key=cvalue=ccccccccccc

PHP简单实现LRU算法原理相关推荐

  1. lru算法实现 redis_使用数组与双向链表实现一个简单的LRU算法

    什么是LRU算法? redis大家都玩过吧,你们好奇redis内存数据存满之后会发生什么吗?抛出异常?禁止使用?还是删除数据?其实redis设计了一种内润淘汰机制. noeviction(默认策略): ...

  2. LRU算法原理及实现

    什么是LRU? 全名(Least recently used 最近最少使用),非常经典的一种算法,像MySQL的Buffer Pool中以及redis的删除策略使用的都是这个. 前一篇文章说过MySQ ...

  3. java 排序原理_简单选择排序算法原理及java实现(超详细)

    简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...

  4. linux页面算法源码,LRU算法原理解析

    LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...

  5. JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  6. 选择排序java代码_JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  7. java 最少使用(lru)置换算法_「面试」LRU了解么?看看LinkedHashMap如何实现LRU算法...

    以下内容均是本人原创,希望你看完之后能有更多更深入的了解,欢迎关注➕ 问题:使用Java完成一个简单的LRU算法 什么是LRU算法 LRU(Least Recently Used),也就是最近最少使用 ...

  8. Redis精通系列——LRU算法详述(Least Recently Used - 最近最少使用)

      本文已收录于专栏 ❤️<Redis精通系列>❤️ 上千人点赞收藏,全套Redis学习资料,大厂必备技能! 目录 1.简介 2.maxmemory配置 3.内存达到maxmemory怎么 ...

  9. Redis中的LRU算法

    本篇文章带大家了解一下Redis中的LRU(Least Recently Used),希望对大家有所帮助! Redis是基于内存存储的key-value数据库,我们知道内存虽然快但空间小,当物理内存达 ...

最新文章

  1. as3.0中如何阻止事件冒泡?
  2. xx.xib: error: Illegal Configuration: Safe Area Layout Guide before iOS 9.0报错问题解决
  3. 数据泄露报告称,1/5 的外部数据泄露事件涉及政府背景(附下载)
  4. R新旧模型、计算净重新分类指数(NRI)和整体鉴别指数(IDI)详解及实战
  5. 1人15篇入选?华人论文知多少?深度分析ICCV2019论文录取背后的那些事儿!
  6. webpack打包第三方类库的正确姿势
  7. 优雅参数判空_java 方法参数怎么优雅校验?
  8. ubuntu执行编译好的文件显示文件不存在_嵌入式开发 | 什么是交叉编译(CROSS_COMPILE)...
  9. OpenCASCADE:形状愈合之修复
  10. 2020年全国普通高校毕业生874万,同比增加40万人。我们该何去何从?
  11. 第十一章项目沟通管理重点--转载
  12. Ollydbg使用教程学习总结(二)
  13. LeetCode 253. 会议室 II(贪心+优先队列)
  14. 如何使用Python操作MySQL数据库
  15. 架构设计 | 缓存管理模式,监控和内存回收策略
  16. 嵌入式linux串口编程(二)
  17. BP算法详细推导及分析
  18. 微信公众平台与微信公众平台的区别与联系
  19. 漫话:希尔排序,这篇还看不懂麻烦找我拿红包
  20. 如何在Debian系统下搭建SVN

热门文章

  1. roobo机器人怎么唱歌_日本“观音”机器人问世,可以陪僧人念佛经
  2. java反多态的代码_Java多态性代码详解
  3. python每日一学_Python每日一练0011
  4. kali kda安装 linux_全昭妍미연Bea MillerWolftylaKDA-THE BADDEST
  5. @vue/cli启动异常:ENOENT: no such file or directory, scandir
  6. Python只需要三十行代码,打造一款简单的人工语音对话
  7. 那份让我想死的化工原理补考试卷
  8. 六、Go编程语言中的函数式编程
  9. kaggle研究生招生(下)
  10. 中国中文信息学会:第一届自然语言生成与智能写作大会讲习班正式发布