class Lru
{
private $lru_arr = []; //lru存放数组
private $len; //最大限制长度
public function __construct($len){
$this->len = $len;
}
//生成hash key,对应array_shift后 数字索引会自动从0开始
public function getKey($id){
return 'key:'.$id;
}
public function add($id,$val){
//已经存在
$key = $this->getKey($id);
if(isset($this->lru_arr[$key]))
unset($this->lru_arr[$key]);
//超过长度,先进入的出列
if(count($this->lru_arr)>=$this->len)
array_shift($this->lru_arr);
//加入
$this->lru_arr[$key]=$val;
}
public function get($id){
$value = false;
$key = $this->getKey($id);
if(isset($this->lru_arr[$key])){
$value = $this->lru_arr[$key];
unset($this->lru_arr[$key]);
$this->lru_arr[$key]=$value;
}
return $value;
}
public function getLru(){
return $this->lru_arr;
}
}
$lru = new Lru(2);
$lru->add(1,1);
$lru->add(2,2);
$lru->add(3,3);
$lru->get(2);
print_r($lru->getLru());
exit;