Apache HTTP Server 中的共享对象缓存

共享对象缓存提供了一种在所有服务器工作程序之间共享简单数据的方法,而与线程和流程模型无关。在跨进程共享数据的优势超过进程间通信的性能开销的地方,可以使用它。

共享对象缓存提供程序

共享对象缓存本身就是一种抽象。五个不同的模块实现了它。要使用缓存,必须存在并配置这些模块中的一个或多个。

唯一需要的配置是选择要使用的缓存提供程序。这是使用缓存的模块的职责,并且它们使用诸如CacheSocacheAuthnCacheSOCacheSSLSessionCacheSSLStaplingCache之类的指令来启用选择。

当前可用的提供者是:

  • “ dbm”(mod_socache_dbm)

    • 这利用了 DBM 哈希文件。如果已安装的 APR 版本支持多种 DBM 实现,则所使用的基础 DBM 的选择可以是可配置的。
  • “ dc”(mod_socache_dc)

    • 这利用了distcache分布式会话缓存库。
  • “内存缓存”(mod_socache_memcache)

    • 这利用了memcached高性能,分布式内存对象缓存系统。
  • “ redis”(mod_socache_redis)

    • 这利用了Redis高性能,分布式内存对象缓存系统。
  • “ shmcb”(mod_socache_shmcb)

    • 这利用了共享内存段内的高性能循环缓冲区。

该 API 提供以下功能:

  • const char * create(ap_socache_instance_t ** instance,const char * arg,apr_pool_t * tmp,apr_pool_t * p);

    • 根据给定的配置字符串创建会话缓存。 instance 参数中返回的实例指针将作为第一个参数传递给后续调用。
  • apr_status_t init(ap_socache_instance_t * instance,const char * cname,const struct ap_socache_hints * hints,server_rec * s,apr_pool_t * pool)

    • 初始化缓存。 cname 的最大长度为 16 个字符,并且唯一标识服务器内缓存的使用者。建议使用模块名称,例如“ mod_ssl-sess”。该字符串可以在文件系统路径中使用,因此建议仅使用字母数字[a-z0-9_-]字符。如果提示为非 NULL,则为提供程序提供一组提示。返回 APR 错误代码。
  • void destroy(ap_socache_instance_t * instance,server_rec * s)

    • 销毁给定的缓存实例对象。
  • apr_status_t 存储区(ap_socache_instance_t * instance,server_rec * s,const unsigned char * id,unsigned int idlen,apr_time_t expiry,unsigned char * data,unsigned int datalen,apr_pool_t * pool)

    • 将对象存储在缓存实例中。
  • apr_status_t 检索(ap_socache_instance_t * instance,server_rec * s,const unsigned char * id,unsigned int idlen,unsigned char * data,unsigned int * datalen,apr_pool_t * pool)

    • 检索缓存的对象。
  • apr_status_t remove(ap_socache_instance_t * instance,server_rec * s,const unsigned char * id,unsigned int idlen,apr_pool_t * pool)

    • 从缓存中删除一个对象。
  • 无效状态(ap_socache_instance_t * instance,request_rec * r,int 标志)

    • 转储 mod_status 的缓存实例的状态。
  • apr_status_t 迭代(ap_socache_instance_t * instance,server_rec * s,void * userctx,ap_socache_iterator_t * iterator,apr_pool_t * pool)

    • 通过迭代器回调转储所有缓存的对象。