0

我在我的缓存中设置了一个查询集:

cache.set('person',Lecture_Detail.objects.all())

在我看来:

from django.core.cahe import cache
t3=datetime.datetime.now()
list(Lecture_Detail.objects.all())
t5 = datetime.datetime.now()
print "time before",(t5 - t3)
g = cache.get('person')
t4 = datetime.datetime.now()
print "time after",(t4 - t5)
g = cache.get('person')
t6 = datetime.datetime.now()
print "time after",t6-t4
g = cache.get('person')
t7 = datetime.datetime.now()
print "time after",t7-t6

当我执行它时,它的输出是:

time before 0:00:00.014256
time after 0:00:01.366022
time after 0:00:01.552436
time after 0:00:01.433049

所以我认为我的 redis 与 django-redis 无关。我的设置是:

CACHES = {
    "default": {
        "BACKEND": "redis_cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379:1",
        "OPTIONS": {
            "CLIENT_CLASS": "redis_cache.client.DefaultClient",
        }
    }
}

所以请我给我一些建议.. 提前谢谢..

4

2 回答 2

5

当您编写queryset=Lecture_Detail.objects.all()数据库时,sql 查询尚未执行。执行查询时:

  1. 迭代
  2. 切片
  3. 酸洗/缓存
  4. 代表()
  5. len()
  6. 列表()
  7. 布尔()

在此处阅读有关此内容的更多信息:When QuerySets areevaluate。因此,在您的示例中,数据库查询将在线执行cache.set('person',queryset)

您可以通过将行从更改为queryset=Lecture_Detail.objects.all()进行测试list(queryset=Lecture_Detail.objects.all())

于 2015-09-21T11:17:18.857 回答
0

实际上我的错误是我使用 django 缓存而不是使用 redis 缓存....要使用 redis,我们必须执行以下操作:

首先从您的 python shell 中设置数据或查看为:

import redis
r=redis.StrictRedis()
r.set('person',Lecture_Detail.objects.all())

从 redis 缓存中获取数据:

import redis

r=redis.StrictRedis()
t3=datetime.datetime.now()
list(Lecture_Detail.objects.all())
t5 = datetime.datetime.now()
print "time before",(t5 - t3)
g = r.get('person')
t4 = datetime.datetime.now()
print "time after",(t4 - t5)

现在时差简直令人难以置信

于 2015-09-28T10:20:55.887 回答