После сохранения данных memcache, они сразу доступны в GAE? - PullRequest
1 голос
/ 02 марта 2011

В Google App Engine (python) мне нужно сохранить данные с помощью memcache и быстро прочитать их на другой странице.

Но прежде чем начать кодирование для сохранения memcache, затем на следующей странице я открываю эти данные с помощью известного ключа, я начинаю задумываться, всегда ли эти данные будут на следующей странице?Сколько времени занимает кеширование данных и надежное ли это чтение на следующей странице?Это проблема, поскольку это облачный сервис, или это проблема, даже если она была на одном сервере?Или это вообще не проблема, и я могу рассчитывать на то, что это будет на следующей странице?

ПРИМЕЧАНИЕ. Этот метод не является основой моего веб-приложения, это просто особый случай, который мне нужно использоватьодин сценарий.Кроме того, для этого сценария я не хочу сохранять данные между страницами со строкой запроса, файлами cookie или значениями заголовка.

Ответы [ 3 ]

3 голосов
/ 02 марта 2011

Я не верю, что в реализации GAE memcached есть что-то особенное, поэтому кэшированные значения будут доступны сразу после их установки, так что да, они будут доступны на следующей странице, если не истек срок действия, так как сервер memcached ударил это предел памяти. Похоже, Google не ограничивает объем данных, которые вы можете хранить в memcache, только количество запросов, которые вы можете сделать, поэтому в действительности я сомневаюсь, что это проблема.

Не рекомендуется полагаться на доступность кэшированного значения, во всех случаях следует использовать шаблон, подобный приведенному ниже.

key = generate_key()
value = memcache.get(key)
if value is None:
    value = generate_value()
    memcache.set(key, value)
3 голосов
/ 02 марта 2011

Распределенная архитектура memcache имеет пул экземпляров memcache, который обслуживает все приложения Google App Engine;сохраненные данные не реплицируются между серверами memcache.

После успешного сохранения данных в memcache ваши данные будут там * для любых последующих запросов, поскольку они хранятся в одном конкретном экземпляре memcache.

* одно предупреждение: значения могут быть удалены из кэша в случае нехватки памяти

2 голосов
/ 02 марта 2011

На практике эти данные, вероятно, будут присутствовать большую часть времени, но вы не можете рассчитывать на них, по своему замыслу - см. документы :

Однако, когдаПринимая во внимание необходимость сохранения значения исключительно в memcache и без поддержки другого постоянного хранилища, убедитесь, что ваше приложение ведет себя приемлемо, когда значение внезапно становится недоступным. Значения могут истекать из memcache в любое время , и могут истекать до истечения срока истечения, установленного для значения.Например, если внезапное отсутствие данных сеанса пользователя приведет к сбою сеанса, эти данные, вероятно, следует сохранить в хранилище данных в дополнение к memcache.

(выделено мое)

...