PHP实现LRU算法的原理详解

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

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注易知道(ezd.cc)的更多内容!   

推荐阅读

    php脚本电脑关机|电脑关机的脚本

    php脚本电脑关机|电脑关机的脚本,,1. 电脑关机的脚本推荐 AutoIt 自动化脚本 其他 按键精灵、……、AutoHotKey、vbs …… 2. 电脑关机

    PHP什么意思

    PHP什么意思,语言,是一种,PHP什么意思PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTM

    创业做网站选择用node好还是php

    创业做网站选择用node好还是php,语言,页面,如果你所开发的是一个PHP网站的前端页面或模板,PHP和Python语言都相对比较简单,所以虽然PHP语

    如何进行phpmyadmin配置 phpmyadmin快速配置方法【详细介绍】

    如何进行phpmyadmin配置 phpmyadmin快速配置方法【详细介绍】,配置,文件,密码,快速,安装配置,方法,    phpmyadmin 配置怎么配置?今天提一下

    php是什么文件格式 php文件打开方法

    php是什么文件格式 php文件打开方法,文件,语言,点击,打开方式,选择,执行,  php文件是一种不能轻易打开的文件,许多人都遇到过点击了php文件后

    PHP文件怎么打开

    PHP文件怎么打开,文件,下载,脚本,怎么打开,语言,选择,PHP文件怎么打开PHP文件一般用Notepad Plus软件打开。PHP文件怎么打开?其实大家并非是需

    php是什么意思

    php是什么意思,执行,语法,语言,特性,文档,脚本语言,php是什么意思很多行外人看到php这三个英文会毫无头绪,完全不知道php是什么意思,本文为大家详

    php 删除数组重复的值

    php 删除数组重复的值,数组,函数,本文目录php 删除数组重复的值如何正确实现PHP删除数组重复元素PHP二维数组如何实现去除重复项php数组怎

    php是前台还是后端语言

    php是前台还是后端语言,语言,支持,语法,性能,版本,提升,php是后端语言,后端是管理、运营、数据挖掘等非面向访问者的东西;php就是在服务器端执行

    PHP中的Yii框架指南

    PHP中的Yii框架指南,框架,安装,配置,应用程序,支持,验证,PHP语言是一门广泛应用的开源脚本语言,它凭借其灵活、高效、安全和易用的特性,成为了网

    聊聊php滑动验证码的实现原理

    聊聊php滑动验证码的实现原理,验证码,滑块,验证,实现原理,图形,拖动,随着互联网的迅速发展,验证码成为了互联网安全保障的重要手段。其中,滑动验

    php的注释有几种

    php的注释有几种,注释,单行注释,作用,多行注释,执行,这是,php的注释有三种,分别是:1、单行注释【//】;2、单行注释【#】;3、多行注释【/** */】。ph

    bcadd php是函数还是扩展

    bcadd php是函数还是扩展,函数,精度,数字,设置,字符串,操作数,bcadd是php中的一个函数,作用是计算两个任意精度数字的加法,该函数的使用语法如“b

    php如何把一个数组倒序输出

    php如何把一个数组倒序输出,输出,数组,倒序,方法,循环,函数,PHP是一种流行的服务器端脚本语言,常用于Web开发。在PHP中,数组是一种非常常见的数据