Djangoのキャッシュ・コヒーレンシ

免責事項:この記事は従って、ブロガーオリジナル記事です。CC 4.0 BY-SAの著作権契約を、再現し、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/weixin_39726347/article/details/88035356

まず、セットキャッシュ

Djangoはデータベース、ファイルやメモリキャッシュをサポートしています。通常、我々はそれを最初に設定します。キャッシュのためのDjangoの設定は、settings.py内のキャッシュの設定項目に位置しています。

Djangoは以下のいくつかのキャッシュシステムをサポートしています。

1.のMemcached

memcachedのは、Djangoのキャッシュシステム、高速、高効率のためのネイティブサポートです。Memcachedのメモリベースのキャッシングサービス、最初に開発LiveJournal.comの問題を解決するためにロードし、その後Dangaオープンソースによるものです。これは、大幅にサイトのパフォーマンスを向上させ、データベースアクセスの数を減らすために、このような大規模なサイトを使用し、Facebookやウィキペディアに似ています。

Memcachedのは、デーモンを起動し、別のメモリブロックを割り当てます。その主な仕事はすぐに、削除インタフェースの追加、検索するためのバッファを提供することです。それは、データベースやファイルシステムの機能を置き換えることはできませんので、すべてのデータは、メモリに直接保存されます。あなたがキャッシュに精通している場合、これらの要素は十分に理解されています。

あなたが初心者であれば、それほど明確です:

  • Memcachedのは、Djangoの付属のソフトウェアが、スタンドアロンのソフトウェアではありません、あなたは、インストール、設定、サービスを開始する必要があります。
  • memcachedはインストールした後に、また、最も一般的に使用され、memcachedのPythonの操作に依存するライブラリをインストールするのpython-memcachedをし、pylibmc。
  • 上記2つの条件が満たされた後だけでなく、ジャンゴに構成します。

構成:

  • Pythonの依存関係のインストールに応じてバックエンドのキャッシュはdjango.core.cache.backends.memcached.MemcachedCacheまたはdjango.core.cache.backends.memcached.PyLibMCCacheを設定しました
  • ポート文字列:LOCATIONは、ホストIPと形式のIPあなたのMemecachedデーモンプロセスのポートに設定されています。またはUnix:Unixオペレーティングシステムでは、フォームのパス、。

以下は、Memcachedの実行参考例でlocalhost (127.0.0.1) port 11211使用して、python-memcachedライブラリを:

 
   
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

次のMemcachedのUNIXローカルソケット上で実行されている:/tmp/memcached.sock、依存関係python-memcached

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'unix:/tmp/memcached.sock',
    }
}

1

  • 2
  • 3
  • 4
  • 5
  • 6

以下は、実行中のMemcachedの/tmp/memcached.sockせずに、unix:/pylibmcライブラリによって、接頭辞:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': '/tmp/memcached.sock',
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

memcachedの分散サポートサービスは、それらのIPアドレスに複数のマシン上で同時に実行することがあり、次のように、LOCATIONに追加されます。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '172.19.26.240:11211',
            '172.19.26.242:21423',
            '172.19.26.244:11213',
        ]
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

メモリキャッシュベースのシステムでは、重大な欠点は、特にこのMemcachedのキャッシュシリアル化をサポートしていない、というの電力データの損失なので、データのセキュリティに注意を払うに必ずしてください持っています。

実際には、瞬間のために、時代の繁栄のRedis、キャッシュとしてのRedisを選択しました。また、シリアル化をサポートしています。

2.データベースキャッシュ

当社は、理由の大きなキャッシュは、データベースの操作を軽減することである使用して、データベースへのキャッシュ場合、それはオフになっています...

だから、ここで、キャッシュベースのデータベースを使用しないようにしよう、特定の記述、それへの簡単な構成の一例を作ることではありません。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Redisのキャッシュ

  • 準備ソフトウェア:データベースをのRedis、ジャンゴ、Redisのモジュール
  • はじめに:
  • インストール:PIPはジャンゴ - Redisのインストール
  • 構成:settings.py
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
           "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

しかし、いくつかのケースでは、あなたは、高速、効率的なインデックスデータベースを持っているなど、いくつかのアプリケーションがあります。

3.ファイルシステムキャッシュ

私たちは、そのデータベースも遅いと感じ、ファイルベースのシステム?より遅いです!しかし、誰あなたの手の中にRedisの、いつMemcachedのデータベースが、あなたはまた、いくつかの抵抗を使用することはできません。ここでは2つの構成例は以下のとおりです。

Unixベースのシステム:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',
    }
}

Windowsベースのオペレーティングシステム、文字のパスを持参する必要があります。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': 'c:/foo/bar',
    }
}

 

 

4.ローカル・キャッシュ・メモリに基づいて、

ローカルホストのメモリに十分な大きさ十分速い場合は、キャッシュとして直接使用することができます。以下のような構成は以下のとおりです。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
    }
}

 

の開発に使用されるバッファ

私たちは、キャッシュを使用してデザインを開発するためにDjangoは非常に親密な。本番環境には大容量のキャッシュシステムであり、ときに一度にサポート開発へのキャッシュシステムを持っていない、または大きな重い男の一種で開発する必要はありません。しかし、実際の開発プロセスは、あなたが、この場合には、非常に楽の発展とキャッシュをキャッシュAPIを使用して、アクセスキャッシュシステムに持っていました。

以下のような構成は以下のとおりです。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

6.カスタムキャッシュバックエンド

もちろん、自分のキャッシュシステムの開発の最高レベルを使用することで、Djangoはいますが、その能力を持っている場合にのみ、サポートされています!設定は非常に簡単です:

CACHES = {
    'default': {
        'BACKEND': 'path.to.backend',
    }
}

 

7.キャッシュパラメータ

上記バッファのそれぞれの後端部は、以下のパラメータを設定することができ、いくつかの追加のパラメータは、キャッシュの動作を制御するために設けられてもよいです。

  • タイムアウト

デフォルトのキャッシュの有効期限は、秒単位で、デフォルトはNoneが期限切れにならないことを示していない300秒です。(キャッシュは意味がありません)キャッシュをすぐに故障の原因になります0に設定します。

  • OPTIONS

バッファの後端に応じて任意のパラメータは、異なっています。

  • KEY_PREFIX

Djangoのサーバーのすべてのキャッシュキー文字列。

  • バージョン

Djangoのサーバーによって生成されるデフォルトのバージョン番号。

  • KEY_FUNCTION

機能のパスポイントを含む文字列は、関数が接頭辞とキャッシュキーの最終版にキーを結合する方法を定義します。

次の例は、バックエンドのファイルシステムベースのキャッシュで構成された、キャッシュの有効期限は60秒、1000のエントリの最大値に設定されています。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',
        'TIMEOUT': 60,
        'OPTIONS': {
            'MAX_ENTRIES': 1000
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

以下の実施例は、のpython-memcachedのライブラリーサイズが2MBのオブジェクトに限定されるの後端に構成されています。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'OPTIONS': {
            'server_max_value_length': 1024 * 1024 * 2,
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

以下は、バックエンドpylibmcライブラリに基づく構成は、バックエンドのバイナリプロトコル、SASL認証とケタマの行動パターンを可能にすることです。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
        'OPTIONS': {
            'binary': True,
            'username': 'user',
            'password': 'pass',
            'behaviors': {
                'ketama': True,
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

第二に、サイト全体のキャッシュ

最も簡単には、システムキャッシュ、サイト全体をキャッシュ使用することです。

これは、次のように「django.middleware.cache.FetchFromCacheMiddleware」ミドルウェアは、設定に追加追加された「django.middleware.cache.UpdateCacheMiddleware」を必要とします:

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
]
  • 1
  • 2
  • 3
  • 4
  • 5

注:updateミドルウェアは、リストの先頭に配置しなければならない、とfectchミドルウェアは最後でなければなりません。これは、ミドルウェアDjangoの使用ルールである、彼らはシーケンシャルな関係があります。

その後、次のファイルに必要な設定にこれらのパラメータを追加します。

CACHE_MIDDLEWARE_ALIAS : 用于存储的缓存的别名
CACHE_MIDDLEWARE_SECONDS : 每个page需要被缓存多少秒.
CACHE_MIDDLEWARE_KEY_PREFIX : 密钥前缀
  • 1
  • 2
  • 3

第三に、キャッシュされたビュー

別の方法は、ビューのフレームバッファ出力をキャッシュすることができる使用することです。django.views.decorators.cache定義でデコレータビュー自動キャッシュの応答結果cache_page、非常にシンプルなの使用:

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
    ...
  • 1
  • 2
  • 3
  • 4
  • 5

cache_pageタイムアウト(秒):一つのパラメータを取ります。上記の例では、my_view()ビューの結果(* 15書かれた60の可読性を向上させるために)15分間キャッシュされます

とにかかわらず、URLのビューキャッシュとしてサイトキャッシュ。同じビューに複数のURLをポイントした場合、各URLは個別にキャッシュされます。URLconfは以下のように場合の例my_view次のとおりです。

urlpatterns = [
    url(r'^foo/([0-9]{1,2})/$', my_view),
]
  • 1
  • 2
  • 3

その後に送信/foo/23/し、/foo/1/要求が個別にキャッシュされます。しかし、明確なURLたら(例えば/foo/23/)の前に要求されており、URL要求にポイントがキャッシュされたコンテンツの再利用後に発行されます。

cache_page彼のインストールにもキャッシュなどのいくつかの追加のパラメータを、使用することができますので、このパラメータは、キャッシュバックエンドの特定の使用を示しています。

@cache_page(60 * 15, cache="special_cache")
def my_view(request):
    ...
  • 1
  • 2
  • 3

オプションのキーワードパラメータを使用してもよいkey_prefix以下のように、各ビュー内の特定のキャッシュ接頭辞を指定します:

@cache_page(60 * 15, key_prefix="site1")
def my_view(request):
    ...
  • 1
  • 2
  • 3

第四に、キャッシュテンプレートフラグメント

また、使用することができますcacheテンプレートのフラグメントをキャッシュするテンプレートタグを。このタグを使用するには、まず、トップの位置テンプレートを追加する必要があります{% load cache %}

テンプレートタグが{% cache %}設定された時間になり、キャッシュタグの内容は、ブロックに含まれます。キャッシュ時間(秒)、キャッシュからのフラグメントの名前:それは、2つのパラメータの最小値が必要です。このように:

{% load cache %}
{% cache 500 sidebar %}
    .. sidebar ..
{% endcache %}
  • 1
  • 2
  • 3
  • 4

また、セグメント内の動的コンテンツに基づいて複数のバージョンをキャッシュすることができます。一例として、サイドバーは、各ユーザサイトのキャッシュの異なるバージョンを生成することができます。ただ与えるために{% cache %}、以下のように、区別キャッシュフラグメントを識別するためのパラメータを渡す前にラベルを:

{% load cache %}
{% cache 500 sidebar request.user.username %}
    .. sidebar for logged in user ..
{% endcache %}
  • 1
  • 2
  • 3
  • 4

キャッシュ・タイムアウトパラメータは、テンプレート変数を整数値に解決できる限り、テンプレート変数することができます。テンプレート変数my_timeout値600に設定されている場合、例えば、次の例は、等価です。

{% cache 600 sidebar %} ... {% endcache %}
{% cache my_timeout sidebar %} ... {% endcache %}
  • 1
  • 2

おすすめ

転載: www.cnblogs.com/AbnerLc/p/11946191.html