php版LRU算法

LRU算法原则:如果一个 数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。

代码写的不好。只是做为demo。

<?php
class lruCache
{
    private $max_size = 4;
    private $lru = [];
    private $time;

    //设置lru
    public function setLRU($val)
    {
        //本行可以删除
        $num = count($this->lru);
        echo '当前数组的个数'.$num.',本次的输入是'.$val.'<br>';
        
        //通过微秒时间戳+延迟10微秒生成唯一key
        usleep(10);
        $this->time = microtime(true) * 10000;
        $time_key = array_search($val, $this->lru);
        if($time_key)
        {
            $_val = $this->lru[$time_key];
            unset($this->lru[$time_key]);
            $this->lru[$this->time] = $val;           
        }
        else
        {
            $this->lru[$this->time] = $val;
        }  
        
        //超过最大的max_size,淘汰最后一个
        $num = count($this->lru);
        if($num > $this->max_size)
        {
            krsort($this->lru);
            array_pop($this->lru);
        }          
    }

    //查询
    public function getLRU()
    {
        krsort($this->lru);
        return $this->lru;
    }
}

$lru = new lruCache();
$lru->setLRU(1);
$lru->setLRU(2);
$lru->setLRU(1);
$lru->setLRU(5);
$lru->setLRU(6);
$lru->setLRU(7);
$lru->setLRU(8);
$lru->setLRU(9);
$lru->setLRU(10);
$lru->setLRU(2);
$lru->setLRU(2);
$lru->setLRU(2);
$lru->setLRU(3);
//查看排序
$rs = $lru->getLRU();
echo '<pre>';
print_r($rs);exit;
?>

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值