Google Code предлагается на следующих языках: English – Español – 日本語 – 한국어 – Português – Pусский – 中文(简体) – 中文(繁體)
Для некоторых задач высокопроизводительные масштабируемые веб-приложения часто используют распределенный кэш данных в памяти до или вместо надежного постоянного хранилища. Для этих целей App Engine включает службу кэша памяти.
API Java кэша памяти реализует интерфейс JCache (javax.cache), предварительный стандарт описан в JSR 107. JCache предоставляет подобный карте интерфейс для кэшированных данных. С помощью ключей можно сохранить и получить значения из кэша. Ключи и значения могут быть любого сериализуемого типа или класса.
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 (количество секунд от полуночи 1 января 1970 г.) Значение будет удалено не позднее этого времени, однако оно может быть удалено и по другим причинам.
В редких случаях значения могут исчезнуть из кэша в течение срока хранения по причинам, отличным от нехватки памяти. Несмотря на то что кэш памяти устойчив к сбоям работы сервера, его значения не сохраняются на диске, поэтому сбой в службе может привести к потере значений.
В целом приложение не должно рассчитывать на то, что кэшированное значение всегда доступно.
Каждый вызов к службы Memcache учитывается относительно квоты вызовов API Memcache.
Данные, которые приложение отправляет в кэш памяти, учитываются относительно квоты данных, отправленных в API (Memcache). Данные, которые приложение получает из кэша памяти, учитываются относительно квоты данных, полученных из API (Memcache).
Подробнее о квотах рассказано в разделе Квоты и в разделе Консоли администрирования "Сведения о квотах".
Помимо квот, к использованию службы Memcache применяются следующие ограничения:
| Ограничение | Величина |
|---|---|
| Максимальный размер кэшированного значения | 1 мегабайт |