PHP实现LRU算法怎么做,代码是什么
Admin 2022-08-03 群英技术资讯 660 次浏览
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
call_user_func(PHP4,PHP5)call_user_func — 传入一个参数来调用回调函数说明mixed call_user_func ( callable $callback [, mixed $parameter [, m...
如果后台数据处理使用PHP来进行,那么就要有相应的数据处理及返回。最常用的就是获取记录总数和表记录查询结果。本文将为大家介绍如何利用PHP实现获取MySQL数据库的记录数据,需要的可以参考一下
在开发过程中,我们常需要做异常处理,如果使用try...catch比较麻烦,那么有没有其他方法呢?这篇文章就给大家介绍laravel 中错误处理为JSON的方法。感兴趣的朋友就继续往下看吧。
在php中,有好几种加密方式,其中就有DES、ECB和CBC这三种加密,今天小编就带大家了解一下这三种加密方式的区别,有需要的可以参考一下。
打开phpstorm软件、进入phpstorm软件界面、点击左上角file按钮、点击settings按钮、依次点击Editor>General>Code Completion按钮、勾选掉右侧Match Case的对勾,点击保存即可。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008