4

したがって、一部のデータをmysqlにキャッシュし、一部をmemcachedにキャッシュしたいと考えています。

現時点では、構成ファイルにこれがありますが、キャッシュバックエンドのルーターを作成する方法がわかりません。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

私はマルチデータベース構造を使用しており、マルチデータベースルーターの書き方を知っています。

settings.py で

DATABASE_ROUTERS = ['oceankeys.dbrouter.SphinxRouter','oceankeys.dbrouter.DefaultDbRouter']

Django キャッシング BACKENDルーターを作成する方法を知っている人はいますか?

ありがとう

4

2 に答える 2

3

Django キャッシュ フレームワークが一般的にdb ルーティングを模倣できるとは思えません。

キャッシュ フレームワークミドルウェアを使用するサイト キャッシュの場合、settings.py でキャッシュの名前を指定する必要があります。

CACHE_MIDDLEWARE_ALIAS = "my_cache_alias"

ページ キャッシュの場合、デコレータでキャッシュの名前を手動で指定できます。次に例を示します。

@cache_page(60 * 15, cache="my_cache_alias")
    def my_view(request):
    ...

キャッシュ ルーティングがサイトとページのキャッシュにとって本当に意味があるかどうかわからないので、これが設計されている方法に問題はありません。

ここで、MySQL をデータベース キャッシュ バックエンドとして使用している場合は、データベース キャッシングに関する Django ドキュメント セクションに従って、MySQL をセットアップしてルーターを作成できます。たとえば、これはあなたのCACHES設定です:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
    'my_cache_alias': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

次に、どのモデルにどのキャッシュ バックエンドを使用するかを識別するルーターを作成します。db エイリアスの代わりにキャッシュ エイリアスを返すことを除いて、DB ルーターとまったく同じように見え、機能します (データベース キャッシングと複数のデータベースに関するドキュメント セクションからわかるはずです)。

于 2011-05-10T21:10:53.003 に答える