Руководство идиотов по движку приложений и memcache - PullRequest
2 голосов
/ 25 марта 2010

Я изо всех сил пытаюсь найти хороший учебник или документ о лучших практиках для использования memcache в движке приложения.

Я очень доволен этим на уровне, представленном в документации. Получите объект по идентификатору, сначала проверив memcache, но я не совсем понимаю, как это сделать:

Если вы кэшируете запрос, существует ли принятый метод для обеспечения очистки / обновления кэша при обновлении объекта, сохраненного в этом запросе.

Каковы последствия использования ReferenceProperties? Если кешировать объект Foo со ссылкой Bar. Мой foo.bar тоже находится в memcache и нуждается в очистке, если он обновляется из какой-то другой части моего приложения.

Я не ожидаю ответов на этот вопрос здесь (если вы не чувствуете себя особенно щедрым!), Но ссылки на то, что я мог прочитать, были бы с благодарностью приняты.

Ответы [ 3 ]

3 голосов
/ 25 марта 2010

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

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

2 голосов
/ 26 января 2012

Один из способов легко сделать это - найти любой вызов put () в хранилище данных и установить memcache после него. Затем убедитесь, что вы получили данные из memcache перед попыткой запроса к хранилищу данных.

Установить memcache после записи в хранилище данных:

data.put()
memcache.set(user_id, data)

Попробуйте получить данные из memcache перед выполнением запроса к хранилищу данных:

data = memcache.get(user_id)
if data is None:
    data = Data.get_by_key_name(user_id)
    memcache.set(user_id, data)

Использование Memcache значительно снижает затраты на ядро ​​приложения. Подробнее о том, как я оптимизировал движок приложения.

0 голосов
/ 06 апреля 2011

О ссылочных свойствах, скажем, у вас есть MainModel и RefModel со ссылочным свойством 'ref', которое указывает на экземпляр MainModel. Всякий раз, когда вы вызываете ref_model.ref, он выполняет операцию получения хранилища данных и получает объект из хранилища данных. Он никак не взаимодействует с memcache.

...