Джанго + Memcached:проблема с лимитом в 1 мб
-
21-09-2019 - |
Вопрос
Кто-нибудь знает о каких-либо решениях для хранения данных размером более 1 МБ в memcached?
Нет ничего страшного в том, чтобы разрезать большие данные на фрагменты по 1 МБ перед настройкой и объединить эти фрагменты после получения из memcached.И этот алгоритм может работать прозрачно для пользователей.
Это может работать на основе этого фрагмента http://www.djangosnippets.org/snippets/488/
Решение
Вы можете попросить memcached увеличить потолок, но зачастую это признак того, что вы делаете что-то не так.
Большую часть времени, когда мы копаемся в том, что люди пытаются сделать с более крупными объектами, они загоняют себя в угол и начинают задавать вопросы типа: «Хорошо, а как я могу просто попросить часть этого объекта?"
Иногда возникает законная потребность в более крупных объектах (поэтому мы это поддерживаем).
Другие советы
Вы проверили, помогает ли сжатие карты сайта?Для меня это уменьшило размер файлов Sitemap до 200 КБ, и теперь они идеально вписываются в memcached.А у ботов карты сайта сегодня нет проблем с gzip.
У меня была аналогичная проблема с кэшированием длинных списков с результатами QuerySet.MyModel.object.defer('huge_data_field1','huge_data_field2') помог исключить огромный объем данных из результатов и решил для меня проблему.Надеюсь, поможет и кому-то еще.
Вы можете настроить задание cron, которое получает карту сайта (сгенерированную структурой карты сайта Django) и сохраняет ее в файл.Затем отправьте этот файл в качестве статического носителя (через nginx или apache, а не через django, конечно...)
curl -o /path-to-static-media/sitemap.xml http://yoursite.com/view-that-generates-sitemap/sitemap.xml