什麼是內存緩存?我從網上找不到關於它的很多信息。實際上,我被要求用C++設計一個基於OO概念的內存緩存,但是不知道如何開始。任何建議,將不勝感激。使用面向概念的內存緩存設計
回答
這取決於上下文,但通常情況下,內存中緩存會存儲一些值,以便稍後可以檢索它,而不是創建新對象。這通常與數據庫結合使用 - 或者實際上任何構建/檢索對象的應用程序都是昂貴的。
對於一個簡單的內存緩存,想象下面的僞類(違反噸的最佳實踐,所以不要將它複製!):
class Integer {
int value;
public:
Integer(int value) : value(value) {
sleep(1000); // Simulates an expensive constructor
}
};
現在,假設你需要創建該類的實例:
Integer one(1);
Integer two(2);
// etc.
...但後來(在另一種方法)也許你需要創建一個新實例2 :
Integer two(2);
這很貴。如果你可以回收舊的價值呢?使用構造函數,這是不可能的,但我們可以很容易地做到這一點使用工廠方法:
class Integer {
int value;
static std::map<int, Integer> cache;
Integer(int value) : value(value) {
sleep(1000); // Simulates an expensive constructor
}
friend Integer make_int(int);
};
Integer make_int(int value) {
std::map<int, Integer>::iterator i = Integer::cache.find(value);
if (i != Integer::cache.end())
return i->second;
Integer ret = Integer(value);
Integer::cache[value] = ret;
return ret;
}
現在我們可以使用make_int
創建或檢索一個整數。每個值將只創建一次:
Integer one = make_int(1);
Integer two = make_int(2);
Integer other = make_int(2); // Recycles instance from above.
返回i->秒; 這是什麼意思? – 2014-03-20 12:41:07
我明白了。謝謝 – 2014-03-20 12:46:24
一個內存中緩存用於存儲通常被存儲在外部,就像一個數據庫記錄,一個HTTP請求,或一個文件的內容的東西。通常,您將維護一個LRU的對象列表。這很容易管理,因爲您只需要在獲取請求時將對象移到列表的頭部,並在需要添加新對象時刪除列表中的最後一個對象。顯然,你可以增加很多複雜度來調整這種行爲,但這是基本的算法。
您可能需要一個「通讀」緩存。也就是說,程序總是要求緩存尋找它需要的對象,如果它不存在於緩存中,則取決於緩存來獲取它。這樣,它簡化了編程,因爲應用程序不必去兩個不同的地方來獲取對象。如果您可以修改已經負責讀取對象的現有模塊(例如,DAO),它也可以隱藏添加緩存。
- 1. GWT緩存概念
- 2. Python面向對象的設計概念
- 3. iPhone內存管理概念
- 4. 內存不足概念
- 5. 瞭解Redis,一般緩存的概念
- 6. php修飾符和緩存概念
- 7. 冷緩存和熱緩存概念是什麼意思?
- 8. 概念設計的實體
- 9. 內存映射的IO概念細節
- 10. 河內塔在C++中使用面向對象的概念
- 11. 字符串和字符串緩衝區內存概念
- 12. 數據庫設計概念
- 13. JavascriptMVC應用程序的概念設計
- 14. 「通用概念」的數據庫設計
- 15. c#如何幫助繪圖使用內存層的概念?
- 16. 「內存段」是彙編程序設計中的唯一概念嗎?
- 17. 存儲概念iOS - Swift
- 18. UNIX塊緩衝區高速緩存概念
- 19. 界面概念
- 20. 關於面向對象的概念
- 21. 虛擬內存是否存在沒有Paging概念?
- 22. CS介紹 - 存儲程序概念 - 無法理解概念
- 23. C++:設計intepreter的概念性問題
- 24. LRU緩存設計
- 25. Kohana ORM緩存/緩存設計方法
- 26. 內存緩存使用PHP
- 27. 緩存和內存使用
- 28. 級內存堆/引用變量的概念
- 29. 面向對象,對象概念
- 30. 在jquery中存儲信息的概念
沒有更多的細節,這是不可能的一天。他們可能會談論memoising,或者可能是磁盤緩存,或... – 2011-03-03 18:04:27