2013-04-24 5 views
11

У нас есть приложение iOS, которое говорит с сервером django через REST API. Большая часть данных состоит из довольно крупных объектов Item, которые включают несколько связанных моделей, которые переводят в один плоский словарь, и эти данные редко меняются.Использование Redis в качестве промежуточного кеша для REST API

Мы обнаружили, что запрос для этого не является проблемой для Postgres, но генерация ответов JSON занимает заметное количество времени. С другой стороны, коллекции предметов варьируются для каждого пользователя.

Я думал о системе рендеринга, где мы просто строим словарь для объекта Item и сохраняем его в redis как строку JSON, таким образом мы можем обслуживать API напрямую из redis (например, HMGET (идентификатор элементов в пользовательской библиотеке) который является быстрым и позволяет относительно легко регенерировать «визуализированные экземпляры», в основном, всего лишь пару сигналов post_save.

Интересно, насколько хорош этот дизайн, есть ли какие-либо серьезные недостатки? Возможно, есть лучший способ для Задача?

+0

Насколько велики ответы json и сколько времени требуется, чтобы свалить json? –

+0

говорят около 300 dicts с 20 ключами в них с некоторыми вложенными dicts, и tastypie и django-rest-framework отображают те, которые до 1 секунды на MBPr –

+0

вы пытались использовать cjson или ultra json уже? –

ответ

16

Конечно, мы делаем то же самое в нашей фирме, используя Redis для хранения не JSON, а больших XML-строк, которые генерируются из баз данных для запросов RESTful, и это экономит много сетевых перелетов и накладных расходов.

Несколько вещей, которые нужно иметь в виду, если это первый раз, когда вы используете Redis ...

Выделенный сервер Redis
Redis является однопоточных и должна быть развернута на выделенном сервере с достаточная мощность процессора. Не делайте ошибки при развертывании на своем сервере приложений или баз данных.

High Availability
Настройка Redis с Master/репликации работорговли для обеспечения высокой доступности. Я знаю, что у Redis cluster был большой прогресс, поэтому вы можете проверить это на HA.

Cache Hit/Miss
При проверке Redis для кэша «удар», если соединение мертво или происходит любое исключение, не выходит из строя запроса, просто по умолчанию в базу данных; кеширование всегда должно быть «лучшим», поскольку база данных всегда может использоваться в качестве последнего средства.

+0

Спасибо за советы! Какую нагрузку у вас на серверах redis? Мы только начинаем, и пока это похоже на один экземпляр EC2, достаточно –

+0

Redis станет последним местом, где вы столкнетесь с узкими местами. Наш сервер redis работает на RedHat Linux Enterprise с 1 двухъядерным процессором/4 ГБ оперативной памяти; основанный на нашем тестировании, 25K пишет в секунду и дважды, что для чтения на основе наших полезных нагрузок (25-100Kb), а Redis даже не разбивает пот; он полностью пинает задницу. – raffian

Смежные вопросы