PHP实现LRU算法怎么做,代码是什么
Admin 2022-08-03 群英技术资讯 1066 次浏览
关于“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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
inet_pton是一个IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换,这篇文章主要介绍了PHP inet_pton 网络函数,需要的朋友可以参考下
这篇文章主要介绍了PHP简单实现图片格式转换(jpg转png,gif转png等),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
所有php里面的值都可以使用函数 serialize()来返回一个包含字节流的字符串来表示。 unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。
安装swoole出现make报错的原因:找不到openssl/ssl.h,首先要确认电脑上有没有安装openssl。解决方法:使用命令“brew install openssl”安装openssl即可。
我们知道PHP中有很多框架,其中ThinkPHP框架是比较常用的框架之一,很多PHP初学者可能对于ThinkPHP框架的用法不是很清楚,因此,这篇文章就给大家介绍一下,包括下载以及配置的介绍,有需要的朋友可以看一下。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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