2011-12-02 105 views
3

我正在研究需要一些緩存管理的內容交換庫。例如,用戶可以發佈數據設計緩存管理API

ContentPtr *publish(char *data, ssize_t length); 
ContentPtr *publish(FILE *fd); 

調用後數據保存在內部緩衝區中,並返回指向該內容的指針。內容可以與ContentPtr

boolean remove(ContentPtr *cPtr); 

被刪除,因爲用戶可以發佈大量的數據,我想補充一個高速緩存管理模塊,以支持像LRU,FIFO,無

  • 高速緩存策略(拒絕出版,當緩存已滿)
  • 緩存大小控制

因爲我從來沒有見過/使用的任何庫高速緩存管理,我不知道最佳實踐是設計這樣的API。任何人都可以推薦一些具有良好緩存管理API的庫?

一些可能的解決方案:

  • void configPolicy(enum Policy p);
  • void configPolicy(int flags); //使用一些標誌和做同樣的事情到fcntl()
  • void configSize(ssize_t size); //大小= -1,如果沒有限制
  • void configSize(string size); //支持16M1G
+0

非常好的問題! –

回答

2

您可以採用pthreads庫通過使用單獨的類/結構來保存關於線程屬性的信息的方法。在你的情況下,這些額外的屬性信息將包括政策信息等,所以你可以讓你的功能如下所示:

ContentPtr *publish(char *data, ssize_t length, cache_attr* attributes); 
ContentPtr *publish(FILE *fd, cache_attr* attributes); 

然後,如果用戶通過一個NULL值的最後一個參數,使用任何默認你感覺像在底層的實現。否則,用戶可以傳遞一個結構/類來描述實現適當策略所需的任何必要屬性。這種方法的好處在於,你總是可以擁有某種類型的抽象基類作爲接口,然後創建派生類,這些派生類可以從某種類型的工廠函數提供,如果你願意......無論哪種方式,它都會使接口靈活適用於您和最終用戶。