J'ai une application Memcached en cours d'exécution Django / Apache2 + Memcached (Ubuntu) et souhaitez garder une trace des utilisateurs connectés en ligne. P>
Quelle serait la meilleure façon de suivre cela? p>
Je préférerais ne pas écrire à la base de données à chaque fois qu'un utilisateur connecté charge une page; Mais quelles autres options y a-t-il? P>
4 Réponses :
Une approche pourrait être: p>
Vous créez un middleware qui suit sur Process_Response: P>
Vous avez maintenant tous les utilisateurs actuellement connectés dans votre Auth.User Table. Tous les utilisateurs qui ont un last_login plus récent que DateTime.Now () - Intervalle (15minutes) pourrait être considéré comme «en ligne». P>
La base de données sera écrite pour chaque utilisateur connecté environ toutes les 10 minutes. Ajustez les valeurs "10" et "15" à vos besoins. P>
L'avantage ici est que les écrivies de base de données sont rares (selon vos deux paramètres numériques 10/15). Et pour l'optimisation de la vitesse, assurez-vous que Last_Login est indexé, un filtre sur ce champ comprenant le nombre est vraiment rapide. P>
J'espère que cela aide. P>
J'aime cette idée, sauf que je ne voudrais pas mettre à jour le champ Last_Login d'Auth.User. Je mettrais à jour un modèle de profil utilisateur ou peut-être un autre modèle. Comment allez-vous étendre cela aux utilisateurs non authentifiés? Je suppose que beaucoup de robots n'utiliseraient pas de cookies. Vous pourriez avoir à suivre via une adresse IP en quelque sorte.
Un hashmap ou une file d'attente en mémoire avec une tâche exécutée toutes les heures de la persistance. p>
Vous ne pouvez pas faire cela à Django sans utiliser de base de données / de stockage persistant en raison de la même raison pour laquelle les sessions Django sont stockées dans la base de données: il peut y avoir plusieurs instances de vos applications à exécuter et que les données doivent synchroniser leurs états + une source de persistance unique [1] p>
Alternativement, vous voudrez peut-être écrire ces informations dans un dossier dans un fichier nommé ID utilisateur, puis vérifier sa date de création / modifiée pour trouver les informations requises. P>
Les sessions Django ne doivent pas être stockées dans la base de données. Ils peuvent être stockés dans le cache.
Vous devez persister le côté du serveur Info, l'intégrité n'est pas importante, le débit et la latence sont importants. Cela signifie que vous devez utiliser une sorte de magasin de la valeur clé. P>
Memcached et Redis ont des clés qui expirent. Vous avez probablement des memcaches déjà installées, utilisez donc ça. P>
Vous pouvez réinitialiser l'heure d'expiration de l'utilisateur : Dernier vu: $ Nom d'utilisateur code> TOUCHE TOUTE VISITE, ou vous pouvez utiliser la technique de cookie de Mawimawi et avoir expiry = 4 * Cookie-Lifetime. P>
Mais comment récupéreriez-vous quels utilisateurs sont en ligne dans le cache, par exemple pour afficher dans une étiquette de modèle?
J'ai compris que l'OP ne voulait que "en ligne maintenant" Lighbulb sur les vignettes et les pages de profilé, et qu'il y avait trop d'utilisateurs en ligne pour montrer une liste. D'autres ont répondu avec différentes hypothèses.
Alors, comment s'est-il avéré pour vous? Je serais intéressé par votre propre solution ...