Google Code 提供下列語言介面: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
高效能、可擴充的網路應用程式處理部分工作時,常常會使用分散式記憶體中的資料快取,來預先處理或直接取代強大的持續性儲存空間。「應用服務引擎」為此設計了記憶體快取服務。
Memcache Java API 實作 JCache 介面 (javax.cache),這是 JSR 107 中提到的草稿標準。JCache 提供類似 Map 的介面來快取資料。您可以使用金鑰來儲存和擷取快取中的值。金鑰和值可以是任何「序列化」類型或類別。
import java.util.Collections;
import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheManager;
// ...
Cache cache;
try {
cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
} catch (CacheException e) {
// ...
}
String key; // ...
byte[] value; // ...
// Put the value into the cache.
cache.put(key, value);
// Get the value from the cache.
value = (byte[]) cache.get(key);
記憶體快取的其中一個用途為加速一般的資料存放區查詢。如果有多個要求使用相同的參數執行相同的查詢,且查詢結果的變更不需立即顯示在網站上,則應用程式可以將結果暫存在記憶體快取中。後續的要求可以檢查記憶體快取,只有在無法找到結果或是結果已經過期時,才需要執行資料存放區查詢。網站的工作階段資料、使用者偏好設定以及在大多數網頁上執行的其他查詢,皆適用快取。
其他暫存值也可能可以使用記憶體快取。不過,如果您決定單獨使用記憶體快取儲存某個值,而不使用其他持續性儲存空間的支援,請確定您的應用程式突然找不到這個值時,仍然可以正常運作。因為記憶體快取中的值可能會隨時失效,甚至可能會在設定的到期時間之前失效。舉例來說,如果使用者工作階段資料的突然消失,將導致工作階段功能產生異常,則該資料除了儲存到記憶體快取之外,也必須儲存到資料存放區。
按照預設,記憶體快取會盡可能保留儲存在其中的值。然而,如果快取的記憶體偏低,當儲存新值到快取時,舊值可能會遭到清除。當舊值因為記憶體壓力而遭到清除時,將率先清除最近使用頻率最低的值。
應用程式可以在儲存值的時候提供到期時間,值的到期時間可以是新增時間開始算起的相對秒數,也可以是未來某個絕對的 Unix 戳記時間 (從 1970 年 1 月 1 日開始算起的秒數)。值在這個時間會立即遭到清除,但是也可能會因為其他因素而提前遭到清除。
在十分特殊的情況下,值也可能會因為記憶體壓力以外的因素而提前自快取中消失。雖然記憶體快取可以迅速從伺服器故障中恢復,不過由於記憶體快取值並不會儲存到磁碟,所以服務的故障可能會導致快取值消失不見。
一般而言,使用應用程式時,不能預期應用程式永遠可以順利取用快取值。
每個記憶體快取呼叫會算入 Memcache API Calls (Memcache API 呼叫) 的配額中。
應用程式傳送至記憶體快取的資料會算入「傳送至 (Memcache) API 的資料」的配額中。 從記憶體快取接收的資料會算入「(從 (Memcache) API 接收的資料」的配額中。
如需瞭解配額的詳細資訊,請參閱「配額」,或參閱「管理控制台」的「配額詳細資訊」一節。
除了配額之外,使用「郵件」服務時也需遵循下列限制:
| 限制 | 大小 |
|---|---|
| 快取值大小上限 | 1 MB |