gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

半天擼完一個PHP 實現LRU 算法的知識

我們學習了解了這么多關于PHP的知識,今天學習如何半天擼完一個PHP 實現LRU 算法的知識,不知你們是否已經完全掌握了呢,如果沒有,那就跟隨本篇文章一起繼續學習吧

整體設計

1:用數組保存緩存對象(Node);

2:緩存對象(Node)之間通過nextKey,preKey組成一個雙向鏈表;

3:保存鏈表頭 跟尾;

處理流程如下圖:

半天擼完一個PHP 實現LRU 算法的知識

主要代碼

1:Node 節點類

/**  * 緩存值保存類,  * Class Node  * @package appcommonmodel  */ class Node{     private $preKey=null;//鏈表前一個節點     private $nextKey=null;//鏈表后一個節點     private $value=null;//當前的值     private $key=null;//當前key       public function __construct(string  $key,$value)     {         $this->value=$value;         $this->key=$key;     }      public function setPreKey($preValue){         $this->preKey=$preValue;     }     public function setNextKey($nextValue){         $this->nextKey=$nextValue;     }      public function getPreKey(){         return $this->preKey;     }      public function getNextKey(){         return $this->nextKey;     }      public function getValue(){         return $this->value;     }      public function setValue($value){         $this->value=$value;     }      public function setKey(string  $key){         $this->key=$key;     }      public function getKey(){         return $this->key;     } }

2:緩存類

/**  * 實現lru緩存  * Class LruCache  * @package appcommonmodel  */ class LruCache {     public $cacheTable =[];     private $headNode=null;     private $lastNode=null;     private $cacheCount=0;     private $cacheMax=100;       /**      * 測試輸出使用      */     public function dumpAllData(){         if (!empty($this->headNode)){             $node=$this->headNode;             while (!empty($node)){                 echo 'key='.$node->getKey().'  nextKey='.(empty($node->getNextKey())?'null':$node->getNextKey()->getKey()).' preKey='.(empty($node->getPreKey())?'null':$node->getPreKey()->getKey()).' value='.$node->getValue()."</br>";                 $node=$node->getNextKey();             }         }     }       /**      * @param int $count      */     public function setCacheMax(int $count){         $this->cacheMax=$count;     }      /**      * @param string $key      * @param $value      * @return bool      */     public function set(string $key,$value){          //設置值為null,則認為刪除緩存節點         if ($value===null){             $this->del($key);             return true;         }          //判斷是否存在表中,存在則更新連表         if (!empty($this->cacheTable[$key])){             $this->updateList($key);             return true;         }          //先判斷是否要刪除         $this->shiftNode();         $this->addNode($key,$value);         return true;      }      /**      * @param string $key      * @return bool      */     public function del(string $key){         if (!empty($this->cacheTable[$key])){             $node=&$this->cacheTable[$key];              //摘出節點             $this->jumpNode($node);             //置空刪除             $node->setPreKey(null);             $node->setNextKey(null);             unset($this->cacheTable[$key]);             return true;         }          return false;     }      /**      * @param string $key      * @return null      */     public function get(string $key){         if (!empty($this->cacheTable[$key])){             $this->updateList($key);             return $this->cacheTable[$key]->getValue();         }          return null;     }       //直接添加節點     private function addNode($key,$value){         $addNode=new Node($key,$value);         if (!empty($this->headNode)){             $this->headNode->setPreKey($addNode);         }         $addNode->setNextKey($this->headNode);          //第一次保存最后一個節點為頭節點         if ($this->lastNode==null){             $this->lastNode=$addNode;         }         $this->headNode=$addNode;         $this->cacheTable[$key]=$addNode;         $this->cacheCount++;     }       //主動刪超出的緩存     private function shiftNode(){         while ($this->cacheCount>=$this->cacheMax){             if (!empty($this->lastNode)){                 if (!empty($this->lastNode->getPreKey())){                     $this->lastNode->getPreKey()->setNextKey(null);                 }                 $lastKey=$this->lastNode->getKey();                 unset($this->cacheTable[$lastKey]);             }             $this->cacheCount--;         }      }      //更新節點鏈表     private function updateList($key){         //這里需要使用引用傳值         $node=&$this->cacheTable[$key];          //當前結點為頭結點 直接不用處理         if ($this->headNode===$node){             return true;         }          //摘出結點         $this->jumpNode($node);         //跟頭結點交換         $node->setNextKey($this->headNode);         $this->headNode->setPreKey($node);         $node->setPreKey(null);         $this->headNode=$node;          return true;      }       //將某個節點摘出來     private function jumpNode(Node &$node){         if (!empty($node->getPreKey())){             $node->getPreKey()->setNextKey($node->getNextKey());         }          if (!empty($node->getNextKey())){             $node->getNextKey()->setPreKey($node->getPreKey());         }          //如果是最后一個節點,則更新最后節點為它的前節點         if ($node->getNextKey()==null){             $this->lastNode=$node->getPreKey();         }          //如果是頭結點         if ($node->getPreKey()==null){             $this->headNode=$node->getNextKey();         }     }    }

3:測試代碼

    public function tt(){     $cath=model("LruCache");     $cath->setCacheMax(3);     $cath->set("aa","aaaaaaaaaaa");     $cath->set("bb","bbbbbbbbbbbb");     $cath->set("cc","ccccccccccccc");     $cath->get("aa");  //        $cath->dumpAllData();         $cath->set("dd","ddddddddddddd"); //        $cath->del("cc"); //        var_dump($cath->cacheTable);         $cath->dumpAllData();         exit();        }

推薦學習:《PHP視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
欧美精品久久久久久久久久久| 天堂av2020| 亚洲色婷婷久久精品av蜜桃| 婷婷激情四射五月天| 欧美日韩在线中文| 女性隐私黄www网站视频| 国内自拍在线观看| 无码人妻精品一区二区三区在线| 国产69精品久久久久999小说| 国产免费一区二区视频| 青青草成人免费在线视频| 日韩激情免费视频| 男人透女人免费视频| 精品久久久99| av动漫在线免费观看| 男女激情无遮挡| 婷婷激情四射五月天| 视频一区二区视频| 国产a级黄色大片| 黄色a级片免费| 午夜国产福利在线观看| 日韩一二区视频| 日韩av在线综合| 亚洲欧美日韩一二三区| av动漫在线免费观看| 亚洲综合在线网站| 一级黄色片在线免费观看| 给我免费播放片在线观看| 欧美性猛交久久久乱大交小说| 在线观看日本www| 婷婷无套内射影院| 欧美日韩中文不卡| 久久久久免费看黄a片app| 另类小说第一页| www.欧美黄色| 在线观看日本www| 青青在线视频观看| 女人床在线观看| 红桃视频 国产| 国产a视频免费观看| 粉嫩av一区二区三区天美传媒| 少妇高清精品毛片在线视频 | 99在线精品免费视频| 成年网站在线播放| 日韩精品一区二区免费| 亚洲国产午夜精品| 五月婷婷狠狠操| 黑森林福利视频导航| 青青青青草视频| 18视频在线观看娇喘| 中文字幕第88页| 黄色一级免费大片| 欧洲av无码放荡人妇网站| 男人添女荫道口喷水视频| 男女爱爱视频网站| 日韩欧美中文视频| 91视频福利网| 亚洲五月激情网| 91精品999| 色戒在线免费观看| 久久久久国产一区| 777一区二区| 在线视频日韩欧美| 国产一级片中文字幕| 日本国产一级片| 天天操精品视频| 国产精品嫩草影视| 色爽爽爽爽爽爽爽爽| 国产又粗又猛又爽又黄的网站| 亚洲天堂第一区| 男人天堂a在线| 高清在线观看免费| 欧美视频第三页| 国产福利在线免费| 拔插拔插华人永久免费| 日本xxx免费| 亚洲精品蜜桃久久久久久| 日韩欧美亚洲天堂| 久热免费在线观看| 国产精品一区二区小说| 潘金莲一级淫片aaaaaa播放1| 日本a在线天堂| 成年人视频网站免费观看| 黄色手机在线视频| 黄色污污在线观看| 欧美在线一区视频| 天天爽夜夜爽一区二区三区| 黄色a级三级三级三级| 男人日女人视频网站| 久久国产精品国产精品| 8x8x华人在线| 91av俱乐部| 成人免费在线视频播放| 黄色国产小视频| 最新av在线免费观看| 日日橹狠狠爱欧美超碰| 日韩成人av免费| 欧美三级午夜理伦三级| 国产盗摄视频在线观看| 欧美伦理片在线看| 国产内射老熟女aaaa| 国产高清视频网站| 日韩一级性生活片| 一本之道在线视频| 国产wwwxx| 1024av视频| 国产青草视频在线观看| 在线观看av网页| 99热成人精品热久久66| 国产一区 在线播放| 91精品999| 亚洲最大综合网| 可以在线看的黄色网址| 成人精品视频在线播放| 好色先生视频污| 久久久久久久久久久久久久久国产| 精品这里只有精品| 日本福利视频在线观看| 亚洲图片 自拍偷拍| 亚洲最大综合网| 男人透女人免费视频| 黄色一级视频在线播放| 亚洲国产精品女人| 91精产国品一二三产区别沈先生| 国产精品无码一本二本三本色| 国内自拍在线观看| 欧美日韩成人免费视频| 精品久久久久久无码中文野结衣| 91免费网站视频| 手机在线视频你懂的| 亚洲午夜激情影院| 五月天国产视频| 国产高清999| 中文字幕综合在线观看| 亚洲制服在线观看| 国产精品99久久久久久大便| 日本精品一区在线| 欧美精品久久96人妻无码| 大地资源网在线观看免费官网| 法国空姐在线观看免费| 免费极品av一视觉盛宴| 日本免费不卡一区二区| 成年人视频在线免费| 国产福利在线免费| 久久精品国产精品亚洲精品色| 日本免费成人网| 阿v天堂2017| 奇米影音第四色| 91香蕉视频网址| 秋霞无码一区二区| 午夜视频你懂的| wwwwww欧美| 欧美日韩第二页| 在线免费看污网站| 野外做受又硬又粗又大视频√| 波多野结衣家庭教师在线| 日韩不卡一二三| 久久手机在线视频| 在线免费视频一区| 欧美做暖暖视频| 欧美日韩在线免费播放| 97超碰人人爱| 岳毛多又紧做起爽| 国产精品久久久久久久av福利| 蜜臀av无码一区二区三区| 我看黄色一级片| 欧美 日本 亚洲| 欧美aaa在线观看| 亚洲成色www.777999| 激情五月婷婷六月| www.久久av.com| 国产成人无码精品久久久性色| 青青草久久伊人| 能看的毛片网站| 黄色成人在线看| 青青草影院在线观看| 色播五月激情五月| 久艹视频在线免费观看| 樱花草www在线| 天天摸天天舔天天操| av天堂永久资源网| 分分操这里只有精品| 强开小嫩苞一区二区三区网站 | 国产69精品久久久久999小说| 欧美性受xxxxxx黑人xyx性爽| 乱人伦xxxx国语对白| 国产精品8888| 中文字幕精品在线播放| av中文字幕网址| 激情文学亚洲色图| 亚洲精品性视频| 日日噜噜噜噜久久久精品毛片| 日本wwww视频| av动漫在线观看| 日本一本二本在线观看| 91视频最新入口| 亚洲自偷自拍熟女另类| 欧美变态另类刺激| 1024精品视频| 久久久久免费精品|