PHP怎样实现LRU算法,详细代码是什么
导读:在实际案例的操作过程中,我们可能会遇到“PHP怎样实现LRU算法,详细代码是什么”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧...
在实际案例的操作过程中,我们可能会遇到“PHP怎样实现LRU算法,详细代码是什么”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。
1.概念
LRU : 最近最少使用算法
2.代码
?php class Node { public $preKey = null; //链表前一个节点 public $nextKey = null; //链表后一个节点 public $key= null; //当前的值 public $value= null; //当前key public 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); //是一个深度的数组(对象)
结果
[root@VM-16-13-centos ~]# php LRU.php
key=evalue=eeeeeeeeeeee
key=dvalue=dddddddddddd
key=cvalue=ccccccccccc
总结
通过以上内容的阐述,相信大家对“PHP怎样实现LRU算法,详细代码是什么”已经有了进一步的了解,更多相关的问题,欢迎关注网络或到官网咨询客服。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: PHP怎样实现LRU算法,详细代码是什么
本文地址: https://pptw.com/jishu/652994.html