我在缓存中设置了一个查询集:
cache.set('person',Lecture_Detail.objects.all())
in my views:
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",
}
}
}
所以请给我一些建议…
编写queryset=Lecture_Detail.objects.all()
数据库时,sql查询尚未执行。执行查询时:
- 迭代
- 切片 酸洗/缓存repr ()
- len ()
- 列表()
- bool ()
在这里阅读更多信息:当queryset被求值时。在示例中,数据库查询将在cache.set('person',queryset)
您可以通过将queryset=Lecture_Detail.objects.all()
更改为list(queryset=Lecture_Detail.objects.all())
来测试
实际上我的错误是我使用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)
和现在的时差简直难以置信