2011-12-14 34 views
10

Tools版本:如何使用Python memcached检查Django缓存的内容?

  • 的Python 2.6.5
  • 的Django 1.3.1
  • memcached的1.4.10
  • 中的python-memcached的1.48

Memcached是当前正在运行:

$ 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 

我是usi NG Memcached和蟒蛇的memcached与我的Django凸出,我已经把它像下面的settings.py

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

我已经在代码中设置缓存:

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

然后我打开一个Django壳牌检查缓存的内容:

>>> 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') 
>>> 

当我使用Django的缓存,countries键存在。但是,当我使用Python的memcache时,我没有得到任何国家的信息。我在上面做错了什么?

回答

8

Django以冒号为前缀缓存键。如果这没有帮助,你可以检查memcached like so

+0

仅供参考django默认情况下不再使用冒号前缀缓存键。但是,您仍然可以通过使用此处所述的KEY_PREFIX配置选项来实现此目的。 http://bit.ly/1lzFFPi – 2014-02-05 05:42:00

+0

你为什么要缩短[Django Cache Key Prefixing](https://docs.djangoproject.com/en/dev/topics/cache/#cache-key-prefixing)URL? – tback 2014-02-05 07:41:53

5

您可以使用memcached_stats来自: https://github.com/dlrust/python-memcached-stats

例子: (我用pylibmc的缓存,但我认为这应该是相同的是,你使用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) 

有也是memcaced_stats的命令行界面: python -m memcached_stats

看看github repo,因为README非常清晰。

2

以下脚本转储memcached服务器的所有内容。它使用Ubuntu 12.04和localhost memcached进行测试,因此您的milage可能会有所不同。

#!/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' 

它做什么,它通过所有的缓存平板并打印每个缓存平板1000个条目。