Я имею выполнение django/apache2 + memcached приложение (человечность) и хотел бы отслеживать зарегистрированных пользователей, которые онлайн.
Каков был бы лучший способ отследить это?
Я предпочел бы не писать в базу данных каждый раз зарегистрированным пользовательским нагрузкам страницу; но что другие опции там?
Подход может быть следующим:
вы создаете промежуточное ПО, которое выполняет следующие действия на process_response:
теперь у вас есть все пользователи, вошедшие в систему в вашей таблице auth.User. Все пользователи, у которых last_login новее, чем datetime.now () - interval (15 минут), могут считаться находящимися в сети.
База данных будет записываться для каждого вошедшего в систему пользователя примерно каждые 10 минут. Отрегулируйте значения «10» и «15» в соответствии с вашими потребностями.
Преимущество здесь в том, что записи в базу данных выполняются редко (согласно двум вашим числовым параметрам 10/15). А для оптимизации скорости убедитесь, что last_login проиндексирован, поэтому фильтр в этом поле, включая Count, будет действительно быстрым.
Надеюсь, это поможет.
Хэш-карта или очередь в памяти с задачей, выполняемой каждый час или около того для ее сохранения.
Вы не можете сделать это в django без использования базы данных / постоянного хранилища по той же причине, по которой сеансы django хранятся в базе данных: может быть несколько экземпляров ваших приложений, и они должны синхронизировать свои состояния + данные через единый источник сохраняемости [1]
В качестве альтернативы вы можете захотеть записать эту информацию в папку в файле с именем пользователя, а затем проверить дату его создания / изменения, чтобы найти необходимую информацию.
Вам необходимо сохранить информацию на стороне сервера, целостность не критична, важны пропускная способность и задержка. Это означает, что вам следует использовать какое-то хранилище ключей и значений.
У Memcached и redis есть ключи, срок действия которых истекает. Вероятно, у вас уже установлен memcached, так что используйте его.
Вы можете сбросить время истечения срока действия ключа user: last-seen: $ username
при каждом посещении, или вы можете использовать технику cookie mawimawi и установить expiry = 4 * cookie-life.