Apache HTTP 伺服器中的共享物件快取
共享物件快取提供一種方法,可以跨伺服器的所有執行緒共用簡單資料,而不論 執行緒和程序模型為何。它用於跨程序共用資料的優點大於跨程序通訊的效能開銷時。

共享物件快取本身是一種抽象。有五種不同的模組會實作它。如要使用快取,必須存在這些模組中的其中一個或多個,並且經過設定。
唯一需要的設定是選擇要使用哪個快取供應器。這是使用快取模組的責任,它們會使用指令啟用選擇,例如 CacheSocache
、AuthnCacheSOCache
、SSLSessionCache
和 SSLStaplingCache
。
目前可用的供應器為
- "dbm" (
mod_socache_dbm
)
- 這會使用 DBM hash 檔。如果安裝的 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 指標會做為後續呼叫的第一個參數。
- 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 為非 NULL,會提供一組提示給供應商。傳回 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)
- 透過迭代器回呼傾印所有快取的物件。