ホームページ > バックエンド開発 > Python チュートリアル > Djangoキャッシングの包括的なガイド

Djangoキャッシングの包括的なガイド

Christopher Nolan
リリース: 2025-02-10 12:29:11
オリジナル
365 人が閲覧しました

Djangoキャッシングの包括的なガイド

キーテイクアウト

  • 基本を理解する:Djangoでのキャッシュの基本的な概念を把握します。これには、応答時間を高速化することでサーバーの負荷を削減し、ユーザーエクスペリエンスを向上させることの重要性が含まれます。
  • セットアップと構成:djangoプロジェクトをセットアップし、ローカルメモリ、ファイルベース、データベース、redisキャッシュなどのさまざまなキャッシング方法を構成する方法を学習します。 高度なキャッシュ用のRedis:djangoでのキャッシュにRedisを使用して飛び込みます。これは、迅速なデータ検索機能を提供し、高性能および分散システムに適しています。
  • 実用的な実装:ビューキャッシュ、テンプレートフラグメントキャッシング、およびウェブアプリケーションのパフォーマンスを大幅に最適化するためのサイトごとのキャッシュなどの実用的なキャッシング技術を探索します。
  • パフォーマンスの利点:Djangoのキャッシュ戦略を実装することで達成できるアプリケーションの速度と効率の劇的な改善を認識し、最終的にはより良いエンドユーザーエクスペリエンスにつながります。
  • この記事では、DjangoでのキャッシュとWeb開発全体について包括的な理解を得ることができます。キャッシュとは何か、キャッシュの利点、Djangoでキャッシュをセットアップする方法、Djangoがサポートするバックエンドシステム、およびキャッシュのベストプラクティスについて学びます。
  • 記事の終わりまでに、バックエンドのWeb開発者として、キャッシュをしっかりと理解し、最高のパフォーマンスのためにDjangoプロジェクトでそれを実装する方法を理解しています。
  • Djangoフレームワークは、最近Web開発者が使用する最も人気のあるバックエンドフレームワークの1つです。開発者として、高いパフォーマンスでWebアプリケーションを構築することは、リストの目標の1つである必要があります。 Djangoには、インメモリキャッシュ、ファイルベースのキャッシュ、データベースキャッシュなどなど、さまざまなキャッシュバックエンドを使用できるキャッシュフレームワークが付属しているため、Djangoで高性能のためにWebアプリケーションを構築することは面倒ではありません。 🎜>
  • djangoキャッシングの紹介
  • Web開発のキャッシュは、Webアプリケーションのパフォーマンスを向上させるためにWeb開発者が使用する手法です。すべてのWebアプリケーションには、ユーザーが一貫して利用したいリソースがあります。リソースは、簡単なWebページからデータベースに保存されているデータまで、何でもかまいません。キャッシュは、リソースにアクセスする速度を最大化する上で重要な役割を果たします。
一般的なキャッシングシナリオとユースケース

Djangoキャッシングフレームワークは、開発者が頻繁にアクセスできるようにすることができる幅広いシナリオとユースケースを提供します。以下は、一般的なキャッシュシナリオです
  • ページキャッシング。これは、サイト上の頻繁に訪問されるページが完全にキャッシュされているシナリオです。アプリケーションは、ページのキャッシュバージョンをページのキャッシュバージョンを取得し、リクエストが行われたときにそれらをレンダリングします。

  • データベースクエリキャッシング。データベースクエリキャッシュは、情報をデータベースに頻繁にリクエストすることに依存するアプリケーションにとって良いアプローチです。一連のリクエストは、データベースをヒットする必要なく、同じキャッシュデータによって満たすことができるため、データベースのヒットを下げてサーバーの応答時間を高速化します。
  • セッションと認証キャッシュ。キャッシュを使用して、合理化されたユーザーエクスペリエンスと応答時間が短縮される場合があります。キャッシュされたデータにより、ユーザーはアプリケーションの認証されたセクションを簡単に移動できるため、キャッシュ認証とセッションの詳細は、冗長認証操作を減らすのに役立ちます。

    Django Cachingの
  • 利点
  • キャッシュは、データが本質であり、速度がより重要であるこの最新の環境で、Web開発者にとってより有利になりました。これらは、キャッシングの利点の一部です:

パフォーマンスが向上しました。キャッシュは、サーバーの負荷を削減することにより、Webアプリケーションのパフォーマンスを向上させます。サーバーがアプリケーションからリクエストを取得すると、キャッシュは、以前にキャッシュされたデータを使用していくつかの要求が満たされることを保証します。これにより、サーバーがそれらの操作をゼロから実行する必要がなくなります。その結果、ユーザーのエクスペリエンスは全体的に改善され、反応時間が増加します。

応答時間の短縮。キャッシュは、データベースのヒットを減らすことで応答時間を最小限に抑えます。キャッシュにより、データを必要になるたびにデータベースから直接ではなく、便利な場所からデータを取得できます。一部のデータには、完了するのに時間がかかる高価な計算が必要なため、データベースから必要になるたびにデータを取得することは、すべてのデータに最適な選択ではないかもしれません。データを保存し、必要なときにいつでも利用できるようにすることにより、キャッシュはその日を節約します。

    リソースの最適化。 Webアプリケーションでデータまたはリソースをキャッシュすることで、同じリソースを出力する繰り返し操作を実行することなく、リソースにアクセスして取得可能になります。
  • djangoプロジェクトのセットアップ

    このセクションの主なタスクは、仮想環境を作成し、プロジェクトに必要なモジュールをインストールすることです。仮想環境を作成するには、端末にこのコマンドを入力してください。
  • プロジェクトのすべてのモジュールはこの環境内にインストールされます。そのため、使用を開始するには、アクティブ化する必要があります。

    Windowsではこれを使用してください:

  • およびmacosまたはlinuxで、これを使用してください:

  • キャッシュを実装する前に、最初に行うことはDjangoプロジェクトをセットアップすることです。最初にDjangoをインストールしましょう。ターミナルを開き、このコマンドを実行します:
$ python <span>-m venv project
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Djangoを正常にインストールした後、Djangoプロジェクトとアプリケーションを作成しましょう。 djangoプロジェクトを作成するには、実行されます:

$ .<span>\project\Scripts\activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

プロジェクトのフォルダーに移動します。ここでは、Djangoアプリケーションを作成します。このコマンドを実行してください:

$ <span>source project/bin/activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

そしてこれを実行してください:

$ pip <span>install django
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

プロジェクトとアプリケーションの作成に成功した後、アプリケーションをプロジェクトに登録する必要があります。 settings.pyファイルを開き、installed_appsリストを次のようにします。

$ django-admin startproject cachedproject
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

注:djangoプロジェクトでアプリケーションを使用するには、installed_appsリストに登録する必要があります。 さあ、Djangoフレームワークが正常にインストールされていることを確認するために、テストしましょう。ターミナルで、このコマンドを実行します:

下の図の出力を取得していることを確認してください。

$ <span>cd cachedproject
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

URLをコピーして、Webブラウザに貼り付けます。予想される出力を以下に示します。Djangoキャッシングの包括的なガイド

Djangoキャッシングの包括的なガイド注:SitePointでDjangoプロジェクトとDjangoアプリをすばやく開始することの詳細を読むことができます。

設定で異なるキャッシング設定の構成

キャッシュを使用するには、Djangoプロジェクトで構成する必要があるため、このセクションでは、Djangoで利用可能なさまざまなキャッシュシステムを構成する方法について説明します。 ローカルメモリキャッシング

その名前が示すように、ローカルメモリキャッシュは、時にはlocmemと略されることがあり、ホスティングマシンのRAMにキャッシュされたデータを保存します。

djangoは、設定.pyファイルに代替キャッシングメカニズムを提供しない場合、デフォルトのキャッシングシステムとしてローカルメモリキャッシュを自動的に使用します。そのスレッドセーフ、迅速で、レスポンシブなキャッシュ技術は注目に値します

ローカルメモリキャッシュは、あらゆる種類のクロスプロセスキャッシュを防ぎ、個々のプロセスが個別のプライベートキャッシュインスタンスを維持するプロセスごとのメカニズムを含むため、生産環境での使用にはそれほど適していません。それにもかかわらず、それはまだ良い選択です

アプリケーションでローカルメモリキャッシングを構成するには、settings.pyファイルに次のコードを追加します。

ファイルベースのキャッシュ

ファイルベースのキャッシュでは、各キャッシュ値はシリアル化され、キャッシュ時にファイルに個別に保持されます。小規模なアプリケーションや、メモリベースのキャッシュが実用的ではない場合に役立ちます。

このキャッシングシステムの欠点は、メモリベースのキャッシュと比較して比較的遅いことです。

アプリケーションでファイルベースのキャッシングを構成するには、settings.pyファイルに次のコードを追加します:

Windowsにいる場合は、このようなドライブ文字で場所のパスを開始することを確認してください。

$ python <span>-m venv project
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

データベースキャッシュ

ファイルにキャッシュを保存し、マシンのRAMをホストすることとは別に、Djangoはデータベースにキャッシュを保存する機能も提供します。

これは、高速で適切にインデックスされたデータベースサーバーを持っている場合に最適に機能します。

アプリケーションでデータベースキャッシングを使用するには、settings.py:

内部に次のコードを追加します。

次のコマンドを使用して、キャッシュを使用する前に上記のセットアップに記載されているデータベーステーブルを作成します。
$ .<span>\project\Scripts\activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコマンドは、Djangoのデータベースキャッシュシステムが期待する適切な形式でデータベース内にテーブルを作成します。テーブルの名前は場所から取られます。この場合、テーブルの名前はmy_cache_tableになります

memcachedキャッシング
$ <span>source project/bin/activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Memcachedは、データベースアクセスを減らしてサイトのパフォーマンスを増やすために、いくつかの人気企業でもWeb開発者が使用するメモリ内キャッシュシステムです。

locmemキャッシュとは対照的に、memcachedはデーモンとして動作します。これは、Memcachedサーバーが直接的なユーザーインタラクションとは無関係に背景プロセスとして実行されることを意味します。したがって、memcachedはマシンに個別にインストールする必要があります。次に、Djangoアプリケーションで、PylibMCやPymemcacheなどのバインディングの1つをインストールおよび構成して、Memcachedを使用します。

Djangoアプリケーションは、以下に示すように、キャッシュ設定、場所、IPアドレス、その他の詳細を追加することにより、Memcached Daemonにリンクできます。

Memcachedテクノロジーは、高速データストレージと取得用に設計されているため、読み取りまたはクエリの高いロードを備えたアプリケーションに特に適しています。

Memcachedの欠点は、データがメモリに保存されるため、サーバーがクラッシュすると失われるということです。

redis

Redisは、キャッシュに使用できるインメモリデータベースです。 Redis Inmemoryデータストレージを使用してデータをキャッシュします。 Redisはその迅速さと適応性で有名であり、分散システムと高性能キャッシュに最適なオプションです。

アプリケーションでRedisを使用してデータをキャッシュするには、ローカルまたはリモートマシンで実行されるRedisサーバーが必要です。マシンにRedisをセットアップするには、Redis Getting Guideをお読みください。
$ pip <span>install django
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
Redisサーバーをセットアップした後、Redis用のPythonバインディングをインストールする必要があります。このコマンドを使用してインストールしてください:

Redis-Pyインターフェイスは、DjangoによってネイティブにサポートされるバインディングまたはDjango-RedisおよびRedisパッケージを使用しています。 Redisサーバーがlocalhost(127.0.0.1)で実行されていることを考えると、

Redisキャッシングをアプリケーションで構成するために、port = 6379、settings.py:

に次のコードを追加します。
$ python <span>-m venv project
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Redisの複雑さと外部サービスへの依存は、そのトレードオフです。 Redisのインストールと構成は、他の特定のキャッシュバックエンドよりも難しい場合があります。オンラインでは、2番目のサーバーと維持が必要です。 Redisの使用は、外部サービスに依存します。 Redisに問題があるか、ダウンしても、アプリケーションのキャッシュ機能が影響を受ける可能性があります。 Redisを使用してDjangoでキャッシュを実行します

わかりました、それで十分な理論です。このセクションでは、Djangoアプリケーションでキャッシュを実行する方法を示します。キャッシュの3つの形式のキャッシュに焦点を当てます

キャッシュ

を表示します
    テンプレートフラグメントキャッシュ
  • 敷地ごとのキャッシュ
  • しかし、各キャッシングフォームを詳細に実行する前に、最初にプロジェクトを適切にセットアップしましょう。モデルを作成、登録、および設定し、アプリケーションのURLを構成し、テンプレートを作成し、Djangoデバッグツールバーをインストールし、構成します。
  • cachedApplicationアプリ内で、モデルを開き、次のように見せます:

次に、admin.pyファイルを開き、このコードを貼り付けます:

このコードスニペットは、django管理ダッシュボードのモデルプログラマーを登録します。
$ .<span>\project\Scripts\activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
モデルに登録する前に、移行をしましょう。ターミナルで、これを実行します:

また、これを実行してください:
$ <span>source project/bin/activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Djangoでは、ターミナルを介して、および管理ダッシュボードを介して、2つの方法でモデルを入力できます。しかし、簡単にするために、管理ダッシュボードを使用します。管理者ダッシュボードはスーパーユーザー専用であるため、作成する必要があります。端末で、次のコマンドを実行します:

$ pip <span>install django
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
このコマンドは、ユーザー名、電子メール、2つのパスワードなどのスーパーユーザーの詳細を入力するように求めます。

スーパーユーザーの作成に正常に作成した後、ローカルサーバーを起動し、ブラウザでこのURLを入力します:http://127.0.0.1:8000/admin/。下の画像は、あなたが取得するページを示しています。

$ django-admin startproject cachedproject
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ログインするには、スーパーユーザーの資格情報を提供し、次のようにモデルにデータを入力してください。
$ <span>cd cachedproject
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

アプリケーションの内部で、テンプレートフォルダーを作成し、その内部でlist_all.htmlファイルを作成します。とりあえず、HTMLファイルを空にしたままにします。 views.pyファイルを開き、次のように見せます:

プロジェクトのurls.pyファイルにホームビューを登録しましょう。 CachedProjectフォルダー内で、urls.pyファイルを開き、このコードを貼り付けます。 Djangoキャッシングの包括的なガイド

list_all.htmlファイルを開き、次のコードを貼り付けます。
$ python <span>-m venv project
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Djangoデバッグツールバーをインストールしましょう。これは、開発者がDjangoアプリケーションのパフォーマンスを監視するのに役立つPythonパッケージであり、データベースクエリ、HTTPリクエスト、テンプレートのレンダリング時間などに関する詳細な情報を提供します。したがって、端末に、このコマンドを入力してください:

$ .<span>\project\Scripts\activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

django-debug-toolbarを構成するには、settings.pyファイルを開き、installed_appsリストを次のように編集します。

$ <span>source project/bin/activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
デバッグツールバーをミドルウェアリストに追加します:

$ pip <span>install django
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この後すぐにデバッグツールバーミドルウェアを作成します

これの前にも来るはずです:
$ django-admin startproject cachedproject
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

次のようにRedisキャッシュの構成を追加します:
$ <span>cd cachedproject
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

また、

このコードを設定に追加してください。
$ python manage.py startapp cachedapplication
ログイン後にコピー

最後に、urls.pyファイルでデバッグツールバーURLを構成しましょう。インポートのすぐ下で、このコードラインを追加します:

INSTALLED_APPS <span>= [
</span>    <span>'django.contrib.admin',
</span>    <span>'django.contrib.auth',
</span>    <span>'django.contrib.contenttypes',
</span>    <span>'django.contrib.sessions',
</span>    <span>'django.contrib.messages',
</span>    <span>'django.contrib.staticfiles',
</span>    <span># new application added
</span>    <span>'cachedapplication',
</span><span>]
</span>
ログイン後にコピー

urlpatternsリストの内部このコードを追加します:

$ python manage.py runserver
ログイン後にコピー

ここまで到達したので、私たちは行ってもいいです。サーバーを実行し、このURLをブラウザに貼り付けます:http://127.0.0.1:8000/home/。下の画像は、私たちが取得したページを示しています。

<span># CACHES dictionary which contains caching configurations.
</span>CACHES <span>= {
</span>    <span># a cache alias or name. In this case, we use "default" as the alias.
</span>    <span>"default": {
</span>        <span># Here, we're using the in-memory cache backend.
</span>        <span>"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
</span>
        <span># LOCATION parameter gives a unique name or identifier to this cache instance.
</span>        <span>"LOCATION": "unique-snowflake",
</span>    <span>}
</span><span>}
</span>
ログイン後にコピー

このビューを使用してアプリケーションを実行するたびに、SQLクエリが作成されます。この場合、3つのクエリが2.60ミリ秒かかりました。そのため、毎回同じデータのSQLクエリを作成しないようにするために、ビューキャッシングを実装します。

Djangoキャッシングの包括的なガイドキャッシュ

を表示します

名前が示すように、ビューキャッシュキャッシュには、個々のジュンゴビューの結果のキャッシュが含まれます。このセクションでは、ビューキャッシングを実装します。これを行うには、view.pyファイルをいくつか変更します。それを開いて、このインポートを追加します:

ビューのすぐ上で

このデコレーターを追加します:

<span># A CACHES dictionary, which contains caching configurations.
</span>CACHES <span>= {
</span>    <span># we use "default" as the alias.
</span>    <span>"default": {
</span>        <span># Here, we're using the file-based cache backend.
</span>        <span>"BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
</span>
        <span># LOCATION parameter to specify the file system path where cached data will be stored.
</span>        <span>"LOCATION": "/var/tmp/django_cache",
</span>    <span>}
</span><span>}
</span>
ログイン後にコピー
(60*15)は、@cache_pageに渡された引数です。キャッシュタイムアウトを秒単位で表します。ホームビューは15分間キャッシュされます

同じビューにアクセスして、ページを更新します。以下に描かれた結果を取得します。

CACHES <span>= {
</span>    <span>"default": {
</span>        <span>"BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
</span>        <span>"LOCATION": "C:/my/path-to/file",
</span>    <span>}
</span><span>}
</span>
ログイン後にコピー

上の画像では、データがキャッシュから取得されているため、0のSQLクエリが実行されていることがわかります。これにより、ユーザーにキャッシュされたコンテンツを提供することにより、サーバーの負荷を減らすことができます。

テンプレートフラグメントキャッシュ

このキャッシュには、プロジェクトのテンプレートの特定の部分をキャッシュすることが含まれます。テンプレートに重度の計算がある部分がある場合、テンプレートフラグメントキャッシングが役立ちます。このキャッシングを実装するには、これらのタグを使用します:{%cache%}、{%cache%}、および{%endcache%}。 {%Cache%}タグは、キャッシュタイムアウトと、特定のキャッシュフラグメントを識別するための一意のキャッシュキーの2つの引数を取ります。 Djangoキャッシングの包括的なガイドこのキャッシュ技術を実装する前に、プロジェクトを実行してみてください。以下の画像は、私たちが得るものを示しています。

Djangoキャッシングの包括的なガイド

合計時間は220.26msで、3つのSQLクエリが7.75msで実行されます。

キャッシュ技術を実装しましょう。テンプレートの
部分をキャッシュします。テンプレート/list_all.htmlを開き、次のように変更します。

ファイルの上部では、{%Cache%}を介してキャッシュをロードしており、{%Cache 500 Programmers%}および{%EndCache%}。

もう一度プロジェクトを実行すると、以下の写真が表示されます。
$ python <span>-m venv project
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上の画像では、キャッシュが実装された後に結果が改善されたことがわかります。

敷地ごとのキャッシュDjangoキャッシングの包括的なガイド

サイトごとのキャッシュは、全サイトキャッシングとしても知られています。サイト全体のページをキャッシュすることが含まれます。実装するには、これらのミドルウェア構成をsettings.pyファイルに追加する必要があります。

そしてこれらの行を追加します:

結論

$ .<span>\project\Scripts\activate
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
結論として、Djangoでのキャッシュを理解することは、高性能Webアプリケーションの作成を検討しているWeb開発者にとって不可欠です。この記事は、Djangoでのキャッシュに関する包括的なガイドを提供し、キャッシュの利点、Djangoでのキャッシュのセットアップ、実装のベストプラクティスなどのトピックをカバーしています。この知識を武装して、バックエンドWeb開発者は、パフォーマンスを最適化するためにDjangoプロジェクトにキャッシュを自信を持って組み込むことができます。

この記事を楽しんだ場合は、SitePointでDjangoの記事をもう少しチェックしてください。

以上がDjangoキャッシングの包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート