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

标签 django postgresql memcached

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

我的主要问题是“如何检查是否使用了 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.

最佳答案

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

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

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

关于Django Memcached - 如何检查是否使用了 memcached?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750892/

相关文章:

sql - 如何返回满足特定事件序列的行?

sql - INSTEAD OF DELETE 触发器 (Postgresql)

java - EC2 实例上 Tomcat 的 Memcached session 管理器,具有自动缩放属性

docker - 使用 Docker-compose 在云部署中进行分布式 memcached

django - 在 Django 1.8 上的 python3.5 中打印变量类型

python-3.x - 名称 'conn' 未定义 : NameError

python - 查看流.io : implementing a queue task

.net - 用于.NET的写后缓存的Redis可扩展性

python - 如果上一个任务成功, celery 运行任务

python - 将 Django 用户与 Google Apps 同步,无需使用 Monkeypatching