PHP实现LRU算法怎么做,代码是什么
Admin 2022-08-03 群英技术资讯 985 次浏览
关于“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
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天小编就为大家分享一篇关于PHP hex2bin()函数用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
laravel中日志没有写入的问题如何解决?当我们把项目部署到Linux 服务器上,可能会出现日志没有写入的情况,一些朋友不清楚怎样解决这个问题,对此下面分享一下解决办法供大家参考。
有时候我们需要使用正则表达式的预查功能,因此就需要了解正向预查与反向预查,这篇问文章就主要给大家介绍正向预查与反向预查的作用以及用法,具有一定的参考价值,感兴趣的朋友就继续往下看吧。
这篇文章给大家分享的是如何利用PHP来实现一个简易留言板,下文有实现步骤以及代码的介绍,虽然页面比较简单,但留言板基本功能都有实现,感兴趣的朋友就继续往下看吧。
今天本文的主题是如何通过PHP来判断一组数据是不是等比数列?对于PHP小白来说可能略有难度,但是相信大家阅读完本文,就对此类问题,了如指掌了。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008