美文网首页
LRU算法的PHP实现

LRU算法的PHP实现

作者: 似水牛年 | 来源:发表于2019-03-28 16:19 被阅读0次
    <?php
    /**
     * LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面
     */
    class LRU_Cache
    {
    
        private $array_lru = array();
        private $max_size = 0;
    
        function __construct($size)
        {
            // 缓存最大存储
            $this->max_size = $size;
        }
    
        public function set_value($key, $value)
        {
            // 如果存在,则向队尾移动,先删除,后追加
            if (array_key_exists($key, $this->array_lru)) {
                unset($this->array_lru[$key]);
            }
            // 长度检查,超长则删除首元素
            if (count($this->array_lru) >= $this->max_size) {
                array_shift($this->array_lru);
            }
            // 队尾追加元素
            $this->array_lru[$key] = $value;
        }
    
        public function get_value($key)
        {
            $ret_value = false;
    
            if (array_key_exists($key, $this->array_lru)) {
                $ret_value = $this->array_lru[$key];
                // 移动到队尾
                unset($this->array_lru[$key]);
                $this->array_lru[$key] = $ret_value;
            }
            
            return $ret_value;
        }
    
        public function vardump_cache()
        {
            var_dump($this->array_lru);
        }
    }
    
    $cache = new LRU_Cache(5);
    $cache->set_value("01", "01");
    $cache->set_value("02", "02");
    $cache->set_value("03", "03");
    $cache->set_value("04", "04");
    $cache->set_value("05", "05");
    $cache->vardump_cache();
    $cache->set_value("06", "06");
    $cache->vardump_cache();
    $cache->set_value("03", "03");
    $cache->vardump_cache();
    $cache->set_value("07", "07");
    $cache->vardump_cache();
    $cache->set_value("01", "01");
    $cache->vardump_cache();
    

    相关文章

      网友评论

          本文标题:LRU算法的PHP实现

          本文链接:https://www.haomeiwen.com/subject/zmtcbqtx.html