Django Memcached - 如何检查是否使用了memcached?

时间:2011-10-13 07:39:09

标签: django postgresql memcached

我决定使用Memcached加速我的Django应用程序,但我不确定它是否真的有效,即使我没有看到任何错误消息。 当然,我用Google搜索了答案,但没有任何帮助...

我的主要问题是“如何检查是否使用了Memcached?”

这就是我所拥有的:

使用PostgreSQL的Django 1.3。 用于Windows的Memcached服务器(1.4.5) Memcached客户端:python-memcached(最新,我认为1.4.7)

我将中间件配置为:

MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',)

缓存:

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

然后我启动memcached.exe。 我可以使用命令“telnet localhost 11211”访问它。

所以一切似乎都运行良好:当我运行“stats”命令时,我可以看到memcached看到“GET”请求。

但是当我检索数据时:

Object.objects.get(ObjectId=1)

我可以看到每个请求上的表“pg_stat_activity”都会发生变化。所以我猜这个查询被重定向到数据库,而它不应该......

另一个测试:我尝试使用命令行向表中添加条目。据我所知,Memcached,该条目不应该添加到真实数据库中,而只能添加到缓存中,是吗?事实是,当我添加一个条目时,它会被添加到数据库......

有人知道如何检查Memcached是否真的被使用过?

提前致谢, S上。

1 个答案:

答案 0 :(得分:5)

为什么你认为该命令会使用缓存?它用于从数据库中获取数据,因此它就是这样做的。 Django不会尝试使用缓存而不是数据库,这很奇怪。

缓存数据库查找的正确方法是询问缓存中的项目,如果不存在,请从数据库中获取并缓存它:

object = cache.get(key)
if not object:
    object = Object.objects.get(id=key)
    cache.set(key, object, timeout)
return object