Apache HTTP 服务器中的共享对象缓存
共享对象缓存提供了一种机制,可以在服务器的所有工作进程之间共享简单数据,无论线程和进程模型如何。它适用于跨进程共享数据的优势超过进程间通信的性能开销的情况。
共享对象缓存本身是一个抽象概念。五个不同的模块实现了它。要使用缓存,必须存在并配置一个或多个这些模块。
唯一需要的配置是选择要使用的缓存提供程序。这是使用缓存的模块的责任,它们使用诸如CacheSocache
、AuthnCacheSOCache
、SSLSessionCache
和SSLStaplingCache
之类的指令来启用选择。
当前可用的提供程序是
- "dbm" (
mod_socache_dbm
)
- 它使用 DBM 哈希文件。如果已安装的 APR 版本支持多个 DBM 实现,则可以使用配置来选择底层的 DBM。
- "dc" (
mod_socache_dc
)
- 它使用distcache 分布式会话缓存库。
- "memcache" (
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 参数中返回的 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_-] 字符。如果 hints 不为空,则它为提供程序提供一组提示。返回 APR 错误代码。
- void destroy(ap_socache_instance_t *instance, server_rec *s)
- 销毁给定的缓存实例对象。
- apr_status_t store(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 retrieve(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)
- 从缓存中删除对象。
- void status(ap_socache_instance_t *instance, request_rec *r, int flags)
- 为 mod_status 转储缓存实例的状态。
- apr_status_t iterate(ap_socache_instance_t *instance, server_rec *s, void *userctx, ap_socache_iterator_t *iterator, apr_pool_t *pool)
- 通过迭代器回调转储所有缓存的对象。