2011-08-17 5 views
1

J'ai donc une webapp où je veux stocker les classements actuels des messages basés sur un algo chaque minute. Pour rendre les messages mis à jour, je voudrais éviter la base de données et obtenir les données (par exemple, le titre du poste, l'auteur, le rang, etc.) de memcached (plus rapide, non?). Une idée est (j'utilise Django btw) pour la vue de convertir une chaîne sérialisée de memcached en python (en utilisant pickle) et ensuite de rendre un modèle affichant les messages dans le bon ordre. Cependant, il peut être dangereux parce que les données soumises par l'utilisateur (titre de poste, etc.) peuvent contenir des caractères qui peuvent être analysés de manière indésirable.Meilleure façon de stocker en toute sécurité un tuple Python de chaînes et d'entiers dans memcached?

1) La meilleure solution consiste-t-elle à nettoyer toutes les données lorsque ces objets sont sauvegardés ou existe-t-il une autre solution?

2) Si le nettoyage des données est une option, quels caractères devraient être exclus dans les différents champs de mon modèle Post?

3) Est-ce que pickle.dump nécessite un fichier pour écrire, ou puis-je simplement obtenir une chaîne en sortie?

Merci les gars.

Un exemple de ce qui doit être stocké:

((post.id, post.title, post.upvotes, post.author.username), (,,,)...) 

(disons 25 messages répétitifs comme celui-ci)

Répondre

0

Pourquoi ne pas tout simplement laisser django.core.cache prendre soin de cela pour vous? Je fais cela à partir d'un projet django qui a Memcached accroché comme base de cache:

$ python manage.py shell 
In [1]: from django.core.cache import cache 

In [2]: cache.set('woot', (3, 'blah', 590)) 

In [3]: cache.get('woot') 
Out[3]: (3, 'blah', 590) 

Il fonctionne pour tout objet python qui peut être décapée.

Aussi, pourquoi ne pas simplement mettre en cache la sortie, avec HTML et tout? Django fournit une bonne mise en cache à vue et une mise en cache de fragments de modèles.

Questions connexes