c++ - 设计缓存管理 API

标签 c++ c api cache-control

我正在开发一个需要一些缓存管理的内容交换库。例如,用户可以发布数据

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=-1
  • void configSize(string size);//支持16M1G

最佳答案

您可以采用 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/

相关文章:

c++ - 如何将数组添加到列表?

c - 从 C 中的函数返回整数数组

c++ - 如何检测API Hook?

python - 为什么 pytest 覆盖会跳过自定义异常消息断言?

c++ - 遇到无效写入问题

c++ - 为什么我在这个函数中的 while 循环有问题?

java - 给定一个数字 n,列出所有 n 位数字,使得每个数字都没有重复数字

C为什么这个for循环在满足条件时不执行?

javascript - 是否可以从商店前端使用 shopify api?

c++ - 如何从 g++ 生成的目标代码中剥离表示源头文件绝对路径的字符串