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",
        }
    }
}

だからplz私は私に何かを提案します..事前に感謝します..

4

2 に答える 2

5

データベースSQLクエリを作成するとき、queryset=Lecture_Detail.objects.all()まだ実行されていません。クエリが実行されると:

  1. 反復
  2. スライス
  3. 酸洗い/キャッシング
  4. repr()
  5. レン()
  6. リスト()
  7. ブール()

詳細については、こちらをご覧ください: QuerySets が評価されるとき。したがって、データベースクエリの例では、オンラインで実行されますcache.set('person',queryset)

queryset=Lecture_Detail.objects.all()行をからに変更することでテストできますlist(queryset=Lecture_Detail.objects.all())

于 2015-09-21T11:17:18.857 に答える