PHP实现LRU算法怎么做,代码是什么
Admin 2022-08-03 群英技术资讯 799 次浏览
关于“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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
svg格式如何转化为png?svg是可缩放的矢量图形格式。svg格式的图像优势有,可任意放大图形显示,而且边缘异常清晰,生成的文件很小,方便传输等等,所以十分适合用于设计高分辨率的Web图形页面。
最近看到一些拖拽验证码的帖子,本着好奇和研究学习的态度简单实现了第一版的 拖拽验证 项目地址:github.com/RLOFLS/drag-captcha 。
workerman无法监听的解决办法:首先删除掉“workerman/workerman”;然后使用命令“workerman/workerman-for-win”;接着重新启动监听即可。
这篇文章主要介绍了Laravel框架环境与配置操作,结合实例形式分析了laravel框架基本环境配置方法及维护模式相关操作技巧,需要的朋友可以参考下
本篇文章给大家带来了关于在Laravel中使用AWS S3的相关知识,AWS S3为我们提供了存储服务器文件的地方,在云中存储文件不需要占用太多的磁盘空间,希望对大家有帮助。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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备09006778号 域名注册商资质 粤 D3.1-20240008