首页 > 代码库 > LRU算法实现
LRU算法实现
LRU是Last Recent Used 缩写,做为一种缓存算法,将最近较少使用的缓存失效。memcache采用了该算法。如下采用了一种PHP的实现方式。该算法将每次新增的内容,放到缓存顶部,达到缓存极限时,将缓存底部的内容清除。可以通过如下PHP代码来模拟。
<?php class LRUCache { private $head; private $tail; private $capacity; private $hashmap; public function __construct($capacity) { $this->capacity = $capacity; $this->hashmap = array(); $this->head = new Node(null, null); $this->tail = new Node(null, null); $this->head->setNext($this->tail); $this->tail->setPrevious($this->head); } public function get($key) { if (!isset($this->hashmap[$key])) { return null; } $node = $this->hashmap[$key]; if (count($this->hashmap) == 1) { return $node->getData(); } // refresh the access $this->detach($node); $this->attach($this->head, $node); return $node->getData(); } public function put($key, $data) { if ($this->capacity <= 0) { return false; } if (isset($this->hashmap[$key]) && !empty($this->hashmap[$key])) { $node = $this->hashmap[$key]; // update data $this->detach($node); $this->attach($this->head, $node); $node->setData($data); } else { $node = new Node($key, $data); $this->hashmap[$key] = $node; $this->attach($this->head, $node); // check if cache is full if (count($this->hashmap) > $this->capacity) { // we‘re full, remove the tail $nodeToRemove = $this->tail->getPrevious(); $this->detach($nodeToRemove); unset($this->hashmap[$nodeToRemove->getKey()]); } } return true; } private function attach($head, $node) { $node->setPrevious($head); $node->setNext($head->getNext()); $node->getNext()->setPrevious($node); $node->getPrevious()->setNext($node); } private function detach($node) { $node->getPrevious()->setNext($node->getNext()); $node->getNext()->setPrevious($node->getPrevious()); } } /** * Class that represents a node in a doubly linked list */ class Node { private $key; // the content of the node private $data; // the next node private $next; // the previous node private $previous; public function __construct($key, $data) { $this->key = $key; $this->data = http://www.mamicode.com/$data;>来源: http://it.taocms.org/03/138.htm来自为知笔记(Wiz)LRU算法实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。