まず、なぜキャッシュを使用できますか?
私たちは、Djangoのビューに到達した後のリクエストで、ビューがレンダリング結果は、ユーザーがHTMLページを見ることで、動的にレンダリングするためのテンプレートに、データベースからのデータを取ることを知っています。各要求は、データベースとレンダリングからデータをフェッチする場合は、大幅にサーバーの圧力だけでなく、のパフォーマンスが低下します、そして、クライアントは即座に応答を得ることができません。レンダリングの結果が速くキャッシュを置くことができる場合は、直接応答して、キャッシュから取り出さ返しがある場合は、対応するリソースが最初にキャッシュをチェックしたか否かの要求が終わるたびに、、、データをフェッチし、レンダリングのセーブ時間、大幅にシステムのパフォーマンスを向上するだけでなく、ユーザーエクスペリエンスを向上させることができないだけ。
キャッシュは、典型的には、高速記憶媒体であると呼ばれるタイプであるが、データの読み出しを高速化する他の方法でもよいです
第二に、キャッシュは動作します:
1、キャッシュなし
- モデルによって取得されたDBのデータからDjangoのビュー
- そして、本当のはHttpResponseを形成するために、レンダリングするテンプレートを呼び出します
- HTTPのソケットにより、クライアントにデータを書き込みます
2、そこにキャッシュされます
- 上記1,2は省略されています
- キャッシュ・ストレージ・プールから直接取得URLがのHttpResponse、クライアントに戻っていました
二つは、Djangoは6つの方法のキャッシュを提供しています
- 開発とデバッグキャッシュ
- メモリキャッシュ
- データベースキャッシュ
- ファイルキャッシュ(使用)
- Memcacheのキャッシュ(のpython-memcachedのモジュールを使用)
- (pylibmcモジュールを使用して)Memcacheのキャッシュ
- Redisのキャッシュを使用する(共通)
- mongdbキャッシュを使用します
第三に、一般的なキャッシュの設定
1、ファイルキャッシュ
-
コンフィギュレーション
CACHES = { 'default': { # 指定缓存方式为文件 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定缓存文件的路径 'LOCATION': '路径', # 缓存超时时间(默认为300秒,None表示永不过期,0表示立即过期) # 可以在setting.py中单独配置CACHE_MIDDLEWARE_SECONDS = 10缓存超时时间,其优先级高于CACHES中的TIMEOUT。 'TIMEOUT':300, } }
-
説明
キャッシュタイプ:CACHE_BACKENDは「//ファイル」を使用してLinuxシステム上でキャッシュエントリは、ファイルシステム上に配置する必要があります。例えば、の/ var / tmpに/ django_cacheに保存されたデータをキャッシュするために、この設定を使用します。
CACHE_BACKEND = 'file:///var/tmp/django_cache'
**注:** 3つのスラッシュがあります。最初の二つはファイルです://、および第三、の/ var / tmpに/ django_cacheディレクトリパスの最初の文字です。
Windowsを使用して、ファイル://プラスファイルの後の文字:
file://d:/cache/django_cache
-
適したシーン
小規模なサイトのための低コストのソリューション
2、Memcacheのキャッシュ(のpython-memcachedの)
-
memcacheのをインストールします。
1、安装memcache sudo apt-get install memcached 2、运行memcached memcached -d -m 50 -p 11311 -u root -d重启或者启动服务 -m 最大内存 默认64 -p 端口号 - u 用户名 3、默认只能本地访问需要修改
-
インストールのジャンゴのpython-memcachedの
pip install python-memcached
-
個々の設定
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', # 指定缓存使用的引擎 'LOCATION': '127.0.0.1:11211', # 指定Memcache缓存服务器的IP地址和端口 'OPTIONS':{ 'MAX_ENTRIES': 300, } } }
-
複数のサーバーの構成
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', # 指定缓存使用的引擎 器 'LOCATION': [ # 指定一台或多台其他主机ip地址加端口为Memcache缓存服务器 '127.0.0.1:11211', '127.0.0.1.3:11311', '127.0.0.1.4:11411', ] # 或者也可以给缓存机器加权重,权重高的承担更多的请求 # 'LOCATION': [ # ('172.19.26.240:11211',5), # ('172.19.26.242:11211',1), # ] } }
-
シナリオ
小規模サイトのキャッシュメカニズムは、例えば、あなたは素晴らしいではありません意味、より小さいブログ、またはアクセスのさまざまな操作を行います。通常、中規模以上のため、シェレメチェボ。
3、Memcacheのキャッシュ(pylibmc)
4、Redisのキャッシュ
-
Redisのをインストールします。
pip install django_redis
-
データベースを作成します。
python manage.py createcachetable
-
コンフィギュレーション
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', # 缓存地址 "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { 'MAX_ENTRIES': 2000 #使用线程池管理连接 "CONNECTION_POOL_KWARGS": {"max_connections": 100} } }, }
-
ジャンゴに保存されたセッション情報を設定するのRedis
SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "default"
第五に、アプリケーションキャッシュ
1.説明
Djangoはキャッシュの異なるサイズがページをキャッシュすることができ、ページの一部のみをキャッシュすることができ、あるいはサイト全体をキャッシュすることができます提供しています。
図2に示すように、ステーションの使用
-
説明
中間ユーザーの要求によって、認証の一連の操作によって、要求されたコンテンツがFetchFromCacheMiddlewareを取得し、ユーザーに戻って使用して、キャッシュ内に存在する場合、
前にユーザーに返さ、駅を達成するために、キャッシュ、キャッシュはキャッシュにUpdateCacheMiddlewareジャンゴに保存されますされていない場合、キャッシュはすでに、存在するかどうかを判断し、
-
コンフィギュレーション
MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', # 响应HttpResponse中设置几个headers # 其它中间件 'django.middleware.cache.FetchFromCacheMiddleware', # 用来缓存通过GET和HEAD方法获取的状态码为200的响应 ]
-
他の構成
CACHE__MIDDLEWARE_SECONDS=15 # 设定超时时间为15秒
-
注意を払います
- UpdateCacheMiddlewareは、先頭に配置する必要があります
- FetchFromCacheMiddlewareは最後でなければなりません
-
サンプルコード
ビュービュー機能
from django.shortcuts import render import time def index(request): cache_time = time.time() return render(request,'index.html',{'time':cache_time})
{% load cache %} # 加载缓存 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>缓存测试</title> </head> <body> <p>{{ time }}</p> {% cache 15 %} # 设定超时时间为15秒 <h3>{{ time }}</h3> {% endcache %} </body> </html>
図3に示すように、別のビュー・バッファ
-
コンフィギュレーション
from django.views.decorators.cache import cache_page @cache_page(60 * 10) 秒数,这里指缓存 10 分钟 def cache_view(request): return render(request, 'cache/index.html', {'bar': bar})
-
第二の方法の設定
from django.views.decorators.cache import cache_page urlpatterns = [ url(r'cache_test/$', cache_page(60 * 10)(cache_view)), ]
4、キャッシュ局所使用
-
文法
1、引入TemplateTag {% load cache %} 2、使用缓存 {% cache 5000 缓存key %} 缓存内容 {% endcache %}
-
テンプレート
{% load cache %} # 加载缓存 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>缓存测试</title> </head> <body> <p>{{ time }}</p> {% cache 15 'cache_test' %} # 设定超时时间为15秒 <h3>{{ time }}</h3> {% endcache %} </body> </html>