如何使用Python memcached检查Django缓存的内容?

时间:2011-12-14 22:47:00

标签: python django memcached

工具版:

  • 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

我在我的Django项目中使用了memcached和python memcached,我在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 shell来检查缓存的内容:

>>> 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时,我没有为国家获得任何东西。我上面做错了什么?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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 :(得分:2)

以下脚本转储memcached服务器的所有内容。它已经使用Ubuntu 12.04和本地主机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个条目。