djangoプロジェクトでは、サーバーの制約のためにmemcachedの代わりにキャッシュテーブルを使用するだけで、いくつかのクエリをキャッシュする必要があります。これらのクエリのDjangoでのキャッシュのキャッシュ
一つ次のようになります。
はのは、私がChild
オブジェクトをたくさん持っているParent
オブジェクトを、持っているとしましょう。 私は単純なクエリparent.childs.all()
の結果を保存する必要があります。
私はそれで何の問題もなく、すべてが期待どおりに
key = "%s_children" %(parent.name)
value = cache.get(key)
if value is None:
cache.set(key, parent.children.all(), CACHE_TIMEOUT)
value = cache.get(key)
のようないくつかのコードで動作します。しかし、時には、ちょうど時々、cache.set
は何もしない、と、cache.set
を実行した後、cache.get(key)
はNone
を返し続けます。
いくつかのテストの後、私はparent.children.all().count()
がより高い値を持つときにcache.set
が動作していないことに気付きました。
つまり、私がkey
(例えば)600の子オブジェクトを格納している場合、それはうまく動作します。
しかし、1200の子どもたちで動作しません。
so 私の質問はです:キーに保存できるデータには制限がありますか?どうすればそれを無効にすることができますか?
2番目の質問:、上記のコード、または以下の一つの "より良い" です方法はありますか?
cache.set
が動作しない場合
key = "%s_children" %(parent.name)
value = cache.get(key)
if value is None:
value = parent.children.all()
cache.set(key, value, CACHE_TIMEOUT)
番目のバージョンではエラーは発生しませんので、それは私の問題の回避策であってもよいが、明らかないソリューションでした。
一般的に、私の問題について忘れてしまいましょう。どのバージョンを「より良い」と考えていますか?
更新されたコードについて:2番目のバージョンが優れています。 setまたはgetの呼び出しには、データのpickleおよびbase64エンコーディングが含まれているため、これらの呼び出しを最小限に抑えるとパフォーマンスが向上します。 – Seth