2016-06-27 1 views
1

Je suis en cours d'exécution d'un service memcached sur mon système Windows et j'ai configuré mes paramètres de dev pour avoir les paramètres de cache suivants:django memcache cache manquez toujours

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION': '127.0.0.1:11211', 
     'TIMEOUT': 3600, 
     'OPTIONS': { 
      'MAX_ENTRIES': 100 
     } 
    } 
} 

Et je mise et obtenir le contenu dans/à partir du cache en utilisant le code suivant:

from django.core.cache import cache 
def get_element(fsid): 
    element = cache.get(str(fsid)) # get element from memcache if present 
    if element is None: 
     info("cache miss for fsid-"+str(fsid)) 
     fs = FlowStatusModel.objects.get(pk=fsid) 
     pickle_path = fs.pickle 
     gcs_pickle_path = fs.gcs_pickle 
     try: 
      info("reading from local disk") 
      with open(pickle_path, 'rb') as handle: 
       element = pickle.load(handle) 
     except: 
      info("local disk failed. copying file from cloud storage bucket to local disk") 
      create_and_copy(gcs_pickle_path, pickle_path) 
      with open(gcs_pickle_path, 'rb') as handle: 
       element = pickle.load(handle) 
     info("adding fsid-"+str(fsid) + " to cache with 1hour timeout") 
     cache.set(str(fsid), element, 3600) 
    return element 

Je vois dans le journal qu'il y a toujours un cache manquant. Je ne pouvais pas comprendre si django était capable de mettre l'élément dans le cache. Si j'essaie de python manage.py shell avec set simple et get, je suis en mesure de récupérer les données. J'ai essayé d'exécuter la commande memcached.exe -vv à partir de la commande prompgt pour voir si elle recevait les requêtes mais dans aucun des scénarios (à partir du serveur dev/manage.py shell) je vois n'importe quel ensemble ou obtenir des informations imprimées sur la console. J'apprécie toute aide pour résoudre le problème.

Répondre

0

Probablement à cause de cela:

'OPTIONS': { 
     'MAX_ENTRIES': 100 
    } 

C'est un très petit nombre. Vous avez probablement beaucoup de coups. Chaque fois que vous ajoutez quelque chose au cache, il est très probable qu'il remplace quelque chose d'autre. C'est probablement ce qui arrive à votre clé fsid.

Il est également possible que vous ayez exécuté la faute de la taille d'élément maximale de memcached. Résoudre ce problème en modifiant le fichier de configuration memcached (de memcached.conf) et en ajoutant les éléments suivants

MAXITEMSIZE=12m 

Cependant, il convient de noter que si vous stockez ces objets de grande taille, memcached peut ne pas être idéal pour vous.

+0

J'insère à peine 5 entrées à partir de maintenant. Pensez-vous que c'est toujours un problème? –

+0

Comment utiliser les outils memcached pour confirmer que c'est le cas? Il va vous montrer combien d'éléments le cache contient réellement – e4c5

+0

J'ai fait 'telnet 127.0.0.1 11211' et je vois que' STAT cmd_set' ne change pas quand memcached est touché par le serveur django mais il augmente quand j'essaye de partir 'python manage.py shell'. Je pense qu'il y a un problème avec le serveur Django. Voyez-vous des problèmes dans ma configuration actuelle? Par ailleurs, je n'ai ajouté aucune classe de middleware de cache dans le champ 'MIDDLEWARE_CLASSES' du fichier de paramètres. –