如何php实现一个lru策略的缓存系统?

大概就是理解【一个数据在最近没有被用到】且【不是新插入的】那么内存不足了就先淘汰的思想,然后配合php的数组来实现,就OK了。

<?php
class LRUCache {
/**
* @param Integer $capacity
*/
public $capacity;
public $LRUArr=[];
function __construct($capacity) {
$this->capacity = $capacity;
}
/**
* @param Integer $key
* @return Integer
*/
function get($key) {
if(array_key_exists($key,$this->LRUArr)){
$tmp = $this->LRUArr[$key];
unset($this->LRUArr[$key]);
$this->LRUArr[$key]= $tmp;
return $tmp;
}
return -1;
}
/**
* @param Integer $key
* @param Integer $value
* @return NULL
*/
function put($key, $value) {
//判断是否在数组中 在就删除 并且把新值插入数组最后
if(array_key_exists($key,$this->LRUArr)){
unset($this->LRUArr[$key]);
}else{
$len =count($this->LRUArr);
if($len == $this->capacity){
//超出则删除第一个元素,将新元素添加到数组尾
//array_shift 所有的数字键名将改为从零开始计数,文字键名将不变
//$this->LRUArr = array_slice($this->LRUArr,1,NULL,true);
foreach($this->LRUArr as $k=>$v){
unset($this->LRUArr[$k]);
break;
}
}
}
$this->LRUArr[$key]=$value;
}
}
$obj = new LRUCache(2);
$obj->put(1, 1);
$obj->put(2, 2);
$obj->get(1);
$obj->put(3, 3);
$obj->get(2); // 返回 -1 (未找到)
$obj->put(4, 4); // 该操作会使得密钥 1 作废
$obj->get(1); // 返回 -1 (未找到)
$obj->get(3); // 返回 3
$obj->get(4); // 返回 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值