算法【LRU 缓存淘汰算法】
一、简介
每次访问的时候需要去取内存里的数据,没取到就添加到内存,但是,又不想取到的内存是过于陈旧的。
LRU【缓存淘汰算法】:最近最少使用策略来管理内存数据。根据数据的历史访问记录来进行淘汰缓存,即假如数据最近被访问过,那么它以后被访问到的几率会更高,也就不会被淘汰。
注:Redis的缓存过期实现也是用的LRU缓存淘汰策略。
二、实现
【核心思想】:维护一个有序的链表,链表尾部的数据就是最早被访问过的数据,当有新数据被访问时,就从链表的表头开始顺序遍历访问。
2.1、当访问的代理IP不在链表内时,就会添加到链表头部。如下,维护了一个6个节点的链表,这6个proxyIp在链表内都没有被缓存过。
2.2、当链表缓存满时,此时我在访问一个新的代理proxy_ip7的时候,就会以最近很少使用的表尾的proxy_ip1节点删除掉,然后,在将当前proxy_ip7添加到表头。
2.3、当访问的代理ip已经在缓存中时,如,proxy_ip5已经缓存过,我们将其遍历出来,然后将其所在节点删除,最后再将其插入到链表的表头。