2016-11-30 3 views
1

В настоящее время я запускаю приложение Django с SESSION_ENGINE, настроенное как user_sessions.backends.db (я использую внешнюю библиотеку this). Собственные встроенные сеансы Django великолепны, однако все данные скрыты в кодированных base64 данных. Эта библиотека делает объекты сеанса доступными, как и другие объекты ORM.Перенос данных сеанса из пользовательского бэкэнд в кеш-сервер (Django)

Мне нужно удалить мою зависимость от этой библиотеки; изменение SESSION ENGINE в кеш для повышения производительности.

Мой вызов делает это изменение , не уничтожая текущие данные сеанса, и об этом говорит этот вопрос. Учитывая его природу, библиотека, естественно, не содержит бэкэнд, кроме db, поэтому мне придется его продлить.

Как мне подойти к этой проблеме? Например, в моей голове: i) Я должен посмотреть на содержимое таблицы db, эта библиотека сохраняет данные сеанса, ii) записывает функциональность, которая сохраняет эти данные в кэш-памяти при каждой записи, iii) переходит к чтению из кеша (с db как спад).

Звучит ли правильно? Хотелось бы знать, что у вас есть что-то в данный момент, поскольку это довольно сложная задача. Заранее спасибо.

+0

Вот как я это сделаю: выясните, как сериализовать текущие данные сеанса в данных сеанса Django. Посмотрите, можете ли вы сопоставить текущий идентификатор сеанса напрямую с ключом, используемым инфраструктурой сеанса Django. Перенесите все данные сеанса в новое хранилище сеансов. Напишите промежуточное программное обеспечение, чтобы перевести ключ cookie старого механизма сеанса на новый, сделав его прозрачным для механизма сеанса Django. (Если повторное использование ключей невозможно, напишите карту old_key => new_key в кеш Django и запросите это). – Tiago

ответ

0

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

Во-первых, я бы точно выяснил, как среда сеанса сериализует данные. Например, на Django 1.10.4, here's what you should be looking for: django/contrib/sessions/backends/base.py#L96.

Затем я бы написал конвертер, который считывает текущие данные сеанса из базы данных и преобразует их в исходный.

Я не уверен, как работают идентификаторы сеансов, но похоже, что они используют один и тот же идентификатор, поэтому должно быть возможно только это, а затем изменить SESSION_ENGINE и MIDDLEWARE_CLASSES обратно на параметры по умолчанию Django. должно сработать.

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