2011-12-14 7 views
10

Herramientas Versión:¿Cómo verifico el contenido de una memoria caché de Django con memcached de Python?

  • Python 2.6.5
  • Django 1.3.1
  • memcached 1.4.10
  • pitón-memcached 1,48

Memcached se está ejecutando actualmente:

$ ps -ef | grep memcache 
nobody 2993  1 0 16:46 ?  00:00:00 /usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1 

Estoy usi ng memcached y Python MemCached con mi proj Django y lo he instalado como el siguiente en settings.py:

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

He creado la memoria caché en el código:

from django.core.cache import cache 
cache.set('countries', ['Canada', 'US']) 

entonces abro un Django shell para inspeccionar el contenido de la caché:

>>> from django.core.cache import cache 
>>> 'countries' in cache 
True 
>>> import memcache 
>>> mc = memcache.Client(['127.0.0.1:11211'], debug=1) 
>>> mc.get('countries') 
>>> 

Cuando uso de caché de Django, existe countries clave. Sin embargo, cuando uso la memcache de Python, no obtengo nada para los países. ¿Qué estoy haciendo mal arriba?

Respuesta

8

Django prefija las claves de caché con dos puntos. Puede inspeccionar memcached like so si esto no ayuda.

+0

Como referencia, django ya no agrega prefijos a sus claves de caché con dos puntos de forma predeterminada. Sin embargo, aún puede hacer que esto suceda utilizando la opción de configuración KEY_PREFIX que se describe aquí. http://bit.ly/1lzFFPi –

+0

¿Por qué acortaría la URL de [Django Cache Prefixing] (https://docs.djangoproject.com/en/dev/topics/cache/#cache-key-prefixing)? – tback

+1

Lo hice porque estaba pensando que me iba a quedar sin espacio para comentarios. (No lo haré en el futuro) –

5

Puede utilizar memcached_stats de: https://github.com/dlrust/python-memcached-stats

Ejemplo: (he usado pylibmc para la caché, pero creo que este debe ser el mismo que utiliza python-memcached)

import pylibmc 

from memcached_stats import MemcachedStats 
mem = MemcachedStats() # connecting to localhost at default memcached port 

# print out all your keys 
mem.keys() 

# say for example key[0] is 'countries', then to get the value just do 
key = mem.keys()[0] 
value = mc.get (key) 

Hay también es una interfaz de línea de comando para memcaced_stats: python -m memcached_stats

Eche un vistazo al repositorio github ya que el README es muy claro.

+0

hay un error en tu código donde haces mc.get() .. ¿qué es mc ...? Supongo que es de pylibmc. + 1-nd tho. la lib de Memcached-stats es increíble. –

+0

ver documentos http://sendapatch.se/projects/pylibmc/ ... típico para la creación de instancias del cliente ... mc = pylibmc.Client (["127.0.0.1"], binary = True, behaviors = {"tcp_nodelay": Es cierto, "ketama": verdadero}) – jpwagner

2

El siguiente script volca todo el contenido de un servidor memcached. Se probó con Ubuntu 12.04 y un servidor local protegido por memoria, por lo que su kilometraje puede variar.

#!/usr/bin/env bash 

echo 'stats items' \ 
| nc localhost 11211 \ 
| grep -oe ':[0-9]*:' \ 
| grep -oe '[0-9]*' \ 
| sort \ 
| uniq \ 
| xargs -L1 -I{} bash -c 'echo "stats cachedump {} 1000" | nc localhost 11211' 

Lo que hace, recorre todas las losas de la caché e imprime 1000 entradas de cada una.

Cuestiones relacionadas