1

コードで明示的な構成を行わずに、django の前で memcached を実行しています。つまり、それ以上のものはありません

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    ...
    'django.middleware.cache.FetchFromCacheMiddleware',
    )

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

私の中でsettings.py。これは非常にうまく機能します。実際、管理ページをキャッシュしているため、キャッシュがデータを再取得するまで、サイトでのライブ アクションを管理する方法がありません。管理ページをそのままにしておくようにmemcachedに知らせるためにどこかに投げることができる正規表現はありますか? (nginxとgunicornも使用しています)

4

2 に答える 2

0

独自のミドルウェア クラスを作成するか、django が提供するものから拡張することができます。

設定ファイルで URL の辞書を指定します。

CACHE_IGNORE_REGEXPS = (
)

ミドルウェア クラスを作成します。

from django.core.cache import cache
import re
import settings


class MyMemCacheMiddleWare:
    def process_response(self, request, response):
        cacheIt = True
        theUrl = request.get_full_path()

        # if it's a GET then store it in the cache:
        if request.method != 'GET':
            cacheIt = False

        # loop on our CACHE_INGORE_REGEXPS and ignore
        # certain urls.
        for exp in settings.CACHE_IGNORE_REGEXPS:
            if re.match(exp,theUrl):
                cacheIt = False

        if cacheIt:
            key = '%s-%s' % (settings.CACHE_KEY_PREFIX,theUrl)
            cache.set(key,response.content)     

        return response

Alex Holtには、 django、memcached、および Nginx に関する非常に優れたチュートリアルがあります。より良いアイデアを得るために、それを読んでみてください。

于 2012-12-13T07:01:07.110 に答える
0

私はまったく同じ問題を抱えていたので、別の最小限の解決策を思いつきました。

最初に、オリジナルを継承する独自のミドルウェアを作成しますUpdateCacheMiddleware

#! /usr/bin/env python
from django.conf import settings
from django.middleware.cache import UpdateCacheMiddleware


class MyUpdateCacheMiddleware(UpdateCacheMiddleware):
    def process_response(self, request, response):
        full_path = request.get_full_path()
        # loop on our CACHE_MIDDLEWARE_IGNORE to ignore certain urls
        for ignore in settings.CACHE_MIDDLEWARE_IGNORE:
            if ignore.match(full_path):
                return response
        # ignore patterns missed, pass it to the original middleware
        return super(MyUpdateCacheMiddleware, self).process_response(
            request, response
        )

次に、設定で次のような正規表現を無視するリストを作成します。

CACHE_MIDDLEWARE_IGNORE = (
    re.compile(r'^/admin/'),
)

UpdateCacheMiddlewareあとは、作成したものに置き換えるだけです。

MIDDLEWARE_CLASSES = (
    'myapp.lib.middlewares.MyUpdateCacheMiddleware',
    # ...
    'django.middleware.cache.FetchFromCacheMiddleware',
)

乾杯。

于 2015-03-20T03:09:18.927 に答える