我正在开发一个需要一些缓存管理的内容交换库。例如,用户可以发布数据
ContentPtr *publish(char *data, ssize_t length);
ContentPtr *publish(FILE *fd);
调用后数据保存在内部缓冲区中,并返回指向该内容的指针。可以使用 ContentPtr
boolean remove(ContentPtr *cPtr);
由于用户可以发布海量数据,所以想加一个缓存管理模块来支持
- LRU、FIFO、None 等缓存策略(缓存满时拒绝发布)
- 缓存大小控制
由于我从未见过/使用过任何带有缓存管理的库,我不知道设计此类 API 的最佳实践是什么。谁能推荐一些具有良好缓存管理 API 的库?
一些可能的解决方案:
void configPolicy(enum Policy p);
void configPolicy(int flags);
//使用一些标志,做一些类似于fcntl()
的事情
void configSize(ssize_t size);
//如果没有限制,size=-1void configSize(string size);
//支持16M
或1G
最佳答案
您可以采用 pthreads
库采用的方法,使用单独的类/结构来保存有关线程属性的信息。在您的情况下,这个额外的属性信息将包含策略信息等。因此您可以使您的函数如下所示:
ContentPtr *publish(char *data, ssize_t length, cache_attr* attributes);
ContentPtr *publish(FILE *fd, cache_attr* attributes);
然后,如果用户将 NULL 值传递给最后一个参数,则使用您在底层实现中喜欢的任何默认值。否则,用户可以传递描述实现适当策略所需的任何必要属性的结构/类。这种方法的好处是,您始终可以将某种类型的抽象基类作为接口(interface),然后创建派生类,如果您愿意,可以从某种类型的工厂函数提供这些派生类……无论哪种方式,它都使接口(interface)对您自己和最终用户都很灵活。
关于c++ - 设计缓存管理 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351466/