0

django で実装された REST-ful サービスがあり、アクセスされるリソースごとに、アクセスされる可能性のある関連データをキャッシュしたいと考えています。

たとえば、リソースhttp://www.example.com/publication/1280は xml 応答を返します。

<publication xmlns="http://www.example.com" xmlns:atom="http://www.w3.org/2005/atom">
<abstract>None</abstract>
<owner>
    <atom:link rel="owner" type="application/xml" href="http://www.example.com/user/1">ckpuser</atom:link>
</owner>
<authors>
<author>
   <atom:link rel="author" type="application/xml" href="http://www.example.com/author/564">P. Almquist</atom:link>
</author>
</authors>
<comments></comments>
<tags></tags>
<keywords></keywords>
<referencematerials></referencematerials>
<peerreviews></peerreviews>
<fields>
<howpublished>RFC 1349 (Proposed Standard)</howpublished>
<url>http://www.ietf.org/rfc/rfc1349.txt</url>
</fields>
</publication>

http://www.example.com/user/1次に、リソースとに関連付けられたデータを事前にキャッシュしたいと思いhttp://www.example.com/author/564ます。

Web サービスと同様に、与えられた応答は一種のデータ構造であるため、クエリセットよりもこの応答全体をキャッシュする方がよいと思います。クエリセットをキャッシュすると、リソースにアクセスするたびにテンプレートのレンダリングに時間がかかります。

それは良いアプローチですか?何か不足していますか?

このアプローチが正しい場合、django が提供するミドルウェアを使用してビューを事前にキャッシュするにはどうすればよいですか

'django.middleware.cache.UpdateCacheMiddleware'

'django.middleware.cache.FetchFromCacheMiddleware'?

ありがとうございました

4

1 に答える 1

0

Django のper-view cache を試してください。

基本的に、URL (およびその他の要素) をキャッシュ キーとして使用し、次のように実装します。

from django.views.decorators.cache import cache_page

@cache_page(60 * 15) # cache for 15 minutes
def my_view(request):
...

これにより、ビューの XML 出力がキャッシュされます。キャッシュが有効な間は、クエリセットのみをキャッシュするよりも取得に必要なリソースが少なくて済みます。

キャッシュミドルウェアはサイト全体django.middleware.cache.UpdateCacheMiddlewaredjango.middleware.cache.FetchFromCacheMiddlewareキャッシュしますが、これはおそらくあなたが望むものではありません.

于 2012-04-12T18:29:29.447 に答える