• Официальный сайт SDK
  • Сайт с примерами кода

Использование Memcache

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

Использование кэша

Алгоритм использования сервиса Memcache простой:

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

Код, показывающий, как происходит типичный запрос к кэшу:

CmRlZiBnZXRfZGF0YSgpOgpkYXRhID0gbWVtY2FjaGUuZ2V0KCJrZXkiKQppZiBkYXRhIGlzIG5vdCBOb25lOgpyZXR1cm4gZGF0YQplbHNlOgpkYXRhID0gc2VsZi5xdWVyeV9mb3JfZGF0YSgpCm1lbWNhY2hlLmFkZCgia2V5IiwgZGF0YSwgNjApCnJldHVybiBkYXRhCg===

Добавление к guestbook.py возможности работы с Memcache

Приложение 'Гостевая книга', рассмотренное в Руководстве для начинающих получает данные из хранилища при каждом запросе пользователя. Мы можем изменить его таким образом, чтобы оно выполняло опрос кэша перед выполнением любого запроса к хранилищу.

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

CmZyb20gZ29vZ2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0IG1lbWNhY2hlCmRlZiBnZXRfZ3JlZXRpbmdzKHNlbGYpOgoiIiJnZXRfZ3JlZXRpbmdzKCkK0J/RgNC+0LLQtdGA0LrQsCDQutGN0YjQsCDQvdCwINC/0YDQtdC00LzQtdGCINC90LDQu9C40YfQuNGPINC+0LHRitC10LrRgtCwIGdyZWV0aW5ncwrQldGB0LvQuCDQvtC9INC90LUg0L7QsdC90LDRgNGD0LbQtdC9LCDRgtC+INCy0YvQt9GL0LLQsNC10YLRgdGPINC80LXRgtC+0LQgcmVuZGVyX2dyZWV0aW5ncyDQuCDQstC+0LfQstGA0LDRidCw0LXQvNGL0Lkg0YDQtdC30YPQu9GM0YLQsNGCINC/0L7QvNC10YnQsNC10YLRgdGPINCyINC60Y3RiArQktC+0LfQstGA0LDRidCw0LXRgjoK0KHRgtGA0L7QutGDINGBIEhUTUwg0LrQvtC00L7QvCwg0YHQvtC00LXRgNC20LDRidGD0Y4g0YHQvtC+0LHRidC10L3QuNGPLgoiIiIKZ3JlZXRpbmdzID0gbWVtY2FjaGUuZ2V0KCJncmVldGluZ3MiKQppZiBncmVldGluZ3MgaXMgbm90IE5vbmU6CnJldHVybiBncmVldGluZ3MKZWxzZToKZ3JlZXRpbmdzID0gc2VsZi5yZW5kZXJfZ3JlZXRpbmdzKCkKaWYgbm90IG1lbWNhY2hlLmFkZCgiZ3JlZXRpbmdzIiwgZ3JlZXRpbmdzLCAxMCk6CmxvZ2dpbmcuZXJyb3IoIk1lbWNhY2hlIHNldCBmYWlsZWQuIikKcmV0dXJuIGdyZWV0aW5ncwo==

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

CmRlZiByZW5kZXJfZ3JlZXRpbmdzKHNlbGYpOgoiIiJyZW5kZXJfZ3JlZXRpbmdzKCkK0JLRi9C/0L7Qu9C90Y/QtdGCINC30LDQv9GA0L7RgSDQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjRhSDRgdC+0L7QsdGJ0LXQvdC40LksINC00L7QsdCw0LLQu9GP0LXRgiDQuNGFINC6INC/0LXRgNC10LzQtdC90L3QvtC5CnJlc3VsdHMg0Lgg0YHQvtC30LTQsNC10YIg0L3QsCDQsdCw0LfQtSDRjdGC0L7Qs9C+IEhUTUwuCtCS0L7Qt9Cy0YDQsNGJ0LDQtdGCOgrQodGC0YDQvtC60YMg0YEgSFRNTCDQutC+0LTQvtC8LCDRgdC+0LTQtdGA0LbQsNGJ0YPRjiDRgdC+0L7QsdGJ0LXQvdC40Y8KIiIiCnJlc3VsdHMgPSBkYi5HcWxRdWVyeSgiU0VMRUNUICogIgoiRlJPTSBHcmVldGluZyAiCiJPUkRFUiBCWSBkYXRlIERFU0MiKS5mZXRjaCgxMCkKb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQpmb3IgcmVzdWx0IGluIHJlc3VsdHM6CmlmIHJlc3VsdC5hdXRob3I6Cm91dHB1dC53cml0ZSgiJmx0O2ImZ3Q7JXMmbHQ7L2ImZ3Q7IHdyb3RlOiIgJSByZXN1bHQuYXV0aG9yLm5pY2tuYW1lKCkpCmVsc2U6Cm91dHB1dC53cml0ZSgiQW4gYW5vbnltb3VzIHBlcnNvbiB3cm90ZToiKQpvdXRwdXQud3JpdGUoIiZsdDtibG9ja3F1b3RlJmd0OyVzJmx0Oy9ibG9ja3F1b3RlJmd0OyIgJQpjZ2kuZXNjYXBlKHJlc3VsdC5jb250ZW50KSkKcmV0dXJuIG91dHB1dC5nZXR2YWx1ZSgpCg===

В завершении необходимо будет обновить обработчик MainPage для вызова нового метода get_greetings() и отображения статистики по результатам работы с кэшем: сколько раз мы получили кэшированные данные.

CmltcG9ydCBjZ2kKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCB3c2dpcmVmLmhhbmRsZXJzCmltcG9ydCBsb2dnaW5nCmltcG9ydCBTdHJpbmdJTwpmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkYgpmcm9tIGdvb2dsZS5hcHBlbmdpbmUuYXBpIGltcG9ydCB1c2Vycwpmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCB3ZWJhcHAKZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaSBpbXBvcnQgbWVtY2FjaGUKbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQpjbGFzcyBHcmVldGluZyhkYi5Nb2RlbCk6CmF1dGhvciA9IGRiLlVzZXJQcm9wZXJ0eSgpCmNvbnRlbnQgPSBkYi5TdHJpbmdQcm9wZXJ0eShtdWx0aWxpbmU9VHJ1ZSkKZGF0ZSA9IGRiLkRhdGVUaW1lUHJvcGVydHkoYXV0b19ub3dfYWRkPVRydWUpCmNsYXNzIE1haW5QYWdlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CmRlZiBnZXQoc2VsZik6CnNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCImbHQ7aHRtbCZndDsmbHQ7Ym9keSZndDsiKQo8Yj5ncmVldGluZ3MgPSBzZWxmLmdldF9ncmVldGluZ3MoKQpzdGF0cyA9IG1lbWNhY2hlLmdldF9zdGF0cygpCnNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCImbHQ7YiZndDtDYWNoZSBIaXRzOiVzJmx0Oy9iJmd0OyZsdDticiZndDsiICUgc3RhdHNbJ2hpdHMnXSkKc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIiZsdDtiJmd0O0NhY2hlIE1pc3NlczolcyZsdDsvYiZndDsmbHQ7YnImZ3Q7Jmx0O2JyJmd0OyIgJQpzdGF0c1snbWlzc2VzJ10pCnNlbGYucmVzcG9uc2Uub3V0LndyaXRlKGdyZWV0aW5ncyk8L2I+CnNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCIiIgombHQ7Zm9ybSBhY3Rpb249Ii9zaWduIiBtZXRob2Q9InBvc3QiJmd0OwombHQ7ZGl2Jmd0OyZsdDt0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiByb3dzPSIzIiBjb2xzPSI2MCImZ3Q7Jmx0Oy90ZXh0YXJlYSZndDsmbHQ7L2RpdiZndDsKJmx0O2RpdiZndDsmbHQ7aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2lnbiBHdWVzdGJvb2siJmd0OyZsdDsvZGl2Jmd0OwombHQ7L2Zvcm0mZ3Q7CiZsdDsvYm9keSZndDsKJmx0Oy9odG1sJmd0OyIiIikKPGI+CmRlZiBnZXRfZ3JlZXRpbmdzKHNlbGYpOgoiIiIKZ2V0X2dyZWV0aW5ncygpCtCf0YDQvtCy0LXRgNC60LAg0LrRjdGI0LAg0L3QsCDQv9GA0LXQtNC80LXRgiDQvdCw0LvQuNGH0LjRjyDQvtCx0YrQtdC60YLQsCBncmVldGluZ3MK0JXRgdC70Lgg0L7QvSDQvdC1INC+0LHQvdCw0YDRg9C20LXQvSwg0YLQviDQstGL0LfRi9Cy0LDQtdGC0YHRjyDQvNC10YLQvtC0IHJlbmRlcl9ncmVldGluZ3Mg0Lgg0LLQvtC30LLRgNCw0YnQsNC10LzRi9C5INGA0LXQt9GD0LvRjNGC0LDRgiDQv9C+0LzQtdGJ0LDQtdGC0YHRjyDQsiDQutGN0YgK0JLQvtC30LLRgNCw0YnQsNC10YI6CtCh0YLRgNC+0LrRgyDRgSBIVE1MINC60L7QtNC+0LwsINGB0L7QtNC10YDQttCw0YnRg9GOINGB0L7QvtCx0YnQtdC90LjRjy4KIiIiCmdyZWV0aW5ncyA9IG1lbWNhY2hlLmdldCgiZ3JlZXRpbmdzIikKaWYgZ3JlZXRpbmdzIGlzIG5vdCBOb25lOgpyZXR1cm4gZ3JlZXRpbmdzCmVsc2U6CmdyZWV0aW5ncyA9IHNlbGYucmVuZGVyX2dyZWV0aW5ncygpCmlmIG5vdCBtZW1jYWNoZS5hZGQoImdyZWV0aW5ncyIsIGdyZWV0aW5ncywgMTApOgpsb2dnaW5nLmVycm9yKCJNZW1jYWNoZSBzZXQgZmFpbGVkLiIpCnJldHVybiBncmVldGluZ3MKZGVmIHJlbmRlcl9ncmVldGluZ3Moc2VsZik6CiIiIgpyZW5kZXJfZ3JlZXRpbmdzKCkK0JLRi9C/0L7Qu9C90Y/QtdGCINC30LDQv9GA0L7RgSDQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjRhSDRgdC+0L7QsdGJ0LXQvdC40LksINC00L7QsdCw0LLQu9GP0LXRgiDQuNGFINC6INC/0LXRgNC10LzQtdC90L3QvtC5CnJlc3VsdHMg0Lgg0YHQvtC30LTQsNC10YIg0L3QsCDQsdCw0LfQtSDRjdGC0L7Qs9C+IEhUTUwuCtCS0L7Qt9Cy0YDQsNGJ0LDQtdGCOgrQodGC0YDQvtC60YMg0YEgSFRNTCDQutC+0LTQvtC8LCDRgdC+0LTQtdGA0LbQsNGJ0YPRjiDRgdC+0L7QsdGJ0LXQvdC40Y8KIiIiCnJlc3VsdHMgPSBkYi5HcWxRdWVyeSgiU0VMRUNUICogIgoiRlJPTSBHcmVldGluZyAiCiJPUkRFUiBCWSBkYXRlIERFU0MiKS5mZXRjaCgxMCkKb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQpmb3IgcmVzdWx0IGluIHJlc3VsdHM6CmlmIHJlc3VsdC5hdXRob3I6Cm91dHB1dC53cml0ZSgiJmx0O2ImZ3Q7JXMmbHQ7L2ImZ3Q7IHdyb3RlOiIgJSByZXN1bHQuYXV0aG9yLm5pY2tuYW1lKCkpCmVsc2U6Cm91dHB1dC53cml0ZSgiQW4gYW5vbnltb3VzIHBlcnNvbiB3cm90ZToiKQpvdXRwdXQud3JpdGUoIiZsdDtibG9ja3F1b3RlJmd0OyVzJmx0Oy9ibG9ja3F1b3RlJmd0OyIgJQpjZ2kuZXNjYXBlKHJlc3VsdC5jb250ZW50KSkKcmV0dXJuIG91dHB1dC5nZXR2YWx1ZSgpCjwvYj4KY2xhc3MgR3Vlc3Rib29rKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6CmRlZiBwb3N0KHNlbGYpOgpncmVldGluZyA9IEdyZWV0aW5nKCkKaWYgdXNlcnMuZ2V0X2N1cnJlbnRfdXNlcigpOgpncmVldGluZy5hdXRob3IgPSB1c2Vycy5nZXRfY3VycmVudF91c2VyKCkKZ3JlZXRpbmcuY29udGVudCA9IHNlbGYucmVxdWVzdC5nZXQoJ2NvbnRlbnQnKQpncmVldGluZy5wdXQoKQpzZWxmLnJlZGlyZWN0KCcvJykKYXBwbGljYXRpb24gPSB3ZWJhcHAuV1NHSUFwcGxpY2F0aW9uKFsKKCcvJywgTWFpblBhZ2UpLAooJy9zaWduJywgR3Vlc3Rib29rKQpdLCBkZWJ1Zz1UcnVlKQpkZWYgbWFpbigpOgp3c2dpcmVmLmhhbmRsZXJzLkNHSUhhbmRsZXIoKS5ydW4oYXBwbGljYXRpb24pCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cm1haW4oKQo==