快取中容量是有限的,當要查詢的資料不在快取中時,我們要用新資料替換掉
部分原有得資料,有很多種替換策略,lru就是最近最少使用的被替換,我們想要
將來被使用的資料保留下來,但我們不知道將來會使用那些資料,就按照最近使用資料近似將來也會使用的資料。
我們要如何體現最近最少使用呢?採用乙個佇列,新加入的資料和上次使用過
的資料放到佇列頭,要替換時從佇列尾刪除資料
在實際實現中,並沒有採取佇列,而是使用鍊錶,因為根據定義我們需要經常
移動資料,採用連續空間的資料結構就不合適。
用了leetcode,lrucache這一題做為實現測試
lrucache裡,使用了unordered_map和雙向鍊錶
用雙向鍊錶來維護最近使用資訊
用unorderd_map來儲存key和value對映,**如下:
using
namespace
std;
typedef
struct node
int key;
node* pre;
node* next;
}node;
class lrucache
~lrucache()
}void changepos(int key)
if (tmp->pre && tmp->next)
else
if (tmp->pre)
else
head.next = tmp;
if(tmp!=oldhead)
}void inserthead(int key)
}int get(int key)
void
set(int key, int value)
else
}else
cache[key] = value;
}int cap;
int sz;
node head, end;
unordered_map
cache;
};
以288ms過了,所有過了**中間中等速度的吧,但是還有不少提公升空 LRU與LFU快取替換演算法C 實現
lfu實現 資料結構unordered map dqueue unordered map的鍵為key,值為node 方便快速訪問資料 dqueue雙端佇列,快速刪除 插入node 簡單的lru是存在缺點的,比如有某一次快取操作是完全隨機的,但是lru快取中替換為了這一次隨機的訪問資料 指的是,只有這...
LIRS快取替換演算法
lirs快取替換演算法 lirs low inter reference recency set 是乙個頁替換演算法,相比於lru least recently used 和很多其他的替換演算法,lirs具有較高的效能。這是通過使用兩次訪問同一頁之間的距離 本距離指中間被訪問了多少非重複塊 作為一種...
LRU快取介紹與實現
如何實現乙個lru呢?如果使用雙向鍊錶 hash實現。首先需求清楚 什麼是lru 需要哪些支援知識 怎麼使用這些基礎知識實現 如果高併發下怎麼辦 反思一些基礎知識。什麼是lru 就是最近最少訪問。需要哪些支援知識 那是不是就想起了linked。為什麼沒有使用linkedlist呢?而是使用linke...