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;
?>
结果: