PHP实现LRU算法怎么做,代码是什么
Admin 2022-08-03 群英技术资讯 542 次浏览
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
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天小编就为大家分享一篇关于在PHP中输出JS语句以及乱码问题的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
thinkphp中有预处理。“ThinkPHP3.1”版本增加了对条件字符串进行预处理的支持,让ORM的安全性更加得以保证。方法:1、使用where方法对字符串条件预处理;2、使用query和execute方法对原生SQL查询方式预处理。
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解,本文实例讲述了PHP中abstract(抽象)、final(最终)和static(静态)原理与用法。分享给大家供大家参考,具体如下
本文实例讲述了php 实现svg转化png格式的方法。分享给大家供大家参考,具体如下
在laravel中,队列可以用于允许在表的前端进行删除操作,而在表的后端进行插入操作;队列是一种操作受限制的线性表,进行插入操作的称为队尾,删除操作的端被称为队头,队列可以将耗时任务的处理往后推延,能够提升web请求的响应速度。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008