最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
PHP实现LRU算法的原理解析
时间:2022-10-17 编辑:坚强 来源:一聚教程网
本文为小伙伴们带来了关于PHP实现LRU算法的原理解析,感兴趣的小伙伴一起来看看吧。
1.概念
LRU : 最近最少使用算法
2.代码
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算法的原理解析的全部内容了,感兴趣的小伙伴记得点击关注哦。
相关文章
- PHP导出数据超时的优化建议解读 10-31
- PHP之mysql位运算解析 10-31
- Laravel实现登录跳转功能解析 10-31
- php双向队列解读 10-31
- Laravel异常上下文解决教程 10-24
- php数组查询元素位置方法介绍 10-24