Python web-Django構成はRedisをバックエンドキャッシュとして使用する
4079 ワード
Python web-Django構成はRedisをバックエンドキャッシュとして使用する
本稿では,Djangoフレームワークにおいて,バックエンドキャッシュデータとしてRedisを設定する方法を紹介した.
1.キャッシュを使用する理由
動的Webサイトでは、ユーザーが要求するたびに、Webサーバがさまざまな計算を行います.
ウェブサイトのトップページについて、私がしなければならない処理には、/indexに対して、マッチングしたビュー関数にルーティングし、トップページに関連するデータテーブルをクエリーし、クエリー結果をコンテキストにカプセル化してテンプレートに、テンプレートに処理し、レンダリングすることが含まれています.
これが完全なトップページの展示プロセスです.短時間でこのような要求を処理することは少なく、私たちのwebサーバーはまだ担ぐことができますが、一度合併すると、ウェブサイトの性能は大きな大学院受験であり、ユーザー体験も大幅に低下します.これがキャッシュの勇武の地です.
また、サイトのトップページでは、ほとんどのユーザーに対して、ログインするかどうかにかかわらず、同じページが表示されます.トップページのデータは、運営者がバックグラウンド管理ページを通じてデータベースに追加したもので、変動は頻繁ではありません.以上、Webサイトのトップページのキャッシュは有用かつ必要であり、バックエンドの研究開発者も、パフォーマンスの最適化、データベースのクエリー回数をできるだけ減らす意識を持つべきであるため、キャッシュは把握しなければならない.
2.Djangoがサポートするキャッシュ方式
Redisデータベースを使用してcacheバックエンドをキャッシュします.
Redisはメモリレベルのデータベースで、読み書きが速く、ウェブサイトのキャッシュに適しています.
Djangoは複数のキャッシュ方式をサポートしています.ここでは説明しません.必要に応じて、公式ドキュメントに移動してください.https://docs.djangoproject.com/en/2.1/topics/cache/
3.使用&構成
(1)取付
(2)settingsファイルはsettingsに配置する.pyファイルに次のコードを追加します.
ここではネイティブRedisデータベース、indexは9のデータテーブルを使用しています.
(3)ビュー関数での呼び出し
1.インポート方法:
2.呼び出し方法:
最初に/indexにアクセスすると、cacheに「index_page_data」というキーがないため、次のビジネスロジック処理を行い、データベースをクエリーしてデータを取り出し、コンテキストcontextにカプセル化し、フロントエンドに戻る.後で/indexにアクセスして、cacheでkeyのvalueを読めばいいです.
3.キャッシュを変更するタイミング
運営者がDjango-adminバックグラウンドでページを管理し、データベースを削除・変更する操作を行った後、トップページのデータに触れると、トップページの表示が必ず変化し、キャッシュを削除する必要があります.このときコードは
キャッシュに「index_page_data」というキーがなくなり、contextはNoneを返します.このとき、次のビジネスロジックを行い、データベースクエリーを行い、最近のデータがフロントエンドに返されたことを検出します.
そこで私たちは対応するアプリケーションappのadmin.pyでは、次の変更を行います.
新しいクラスBaseModelAdminはadminから継承されます.ModelAdminでは,添削の際,そのまま親のメソッドを呼び出し,メソッドの末尾にcacheの削除キーの操作を行い,トップページを更新する目的を達成する.
その後、他のモデル管理クラスは、BaseModelAdminを直接継承すればよい.こんな感じで
4.まとめ
これでDjangoではRedisをトップページキャッシュとして構成して使用する流れがすべて与えられ,読者は方法を参照してトップページの他の場所にキャッシュを追加することができ,不足があれば指摘を歓迎する.
Best wishes北郵便Renyi
本稿では,Djangoフレームワークにおいて,バックエンドキャッシュデータとしてRedisを設定する方法を紹介した.
1.キャッシュを使用する理由
動的Webサイトでは、ユーザーが要求するたびに、Webサーバがさまざまな計算を行います.
ウェブサイトのトップページについて、私がしなければならない処理には、/indexに対して、マッチングしたビュー関数にルーティングし、トップページに関連するデータテーブルをクエリーし、クエリー結果をコンテキストにカプセル化してテンプレートに、テンプレートに処理し、レンダリングすることが含まれています.
これが完全なトップページの展示プロセスです.短時間でこのような要求を処理することは少なく、私たちのwebサーバーはまだ担ぐことができますが、一度合併すると、ウェブサイトの性能は大きな大学院受験であり、ユーザー体験も大幅に低下します.これがキャッシュの勇武の地です.
また、サイトのトップページでは、ほとんどのユーザーに対して、ログインするかどうかにかかわらず、同じページが表示されます.トップページのデータは、運営者がバックグラウンド管理ページを通じてデータベースに追加したもので、変動は頻繁ではありません.以上、Webサイトのトップページのキャッシュは有用かつ必要であり、バックエンドの研究開発者も、パフォーマンスの最適化、データベースのクエリー回数をできるだけ減らす意識を持つべきであるため、キャッシュは把握しなければならない.
2.Djangoがサポートするキャッシュ方式
Redisデータベースを使用してcacheバックエンドをキャッシュします.
Redisはメモリレベルのデータベースで、読み書きが速く、ウェブサイトのキャッシュに適しています.
Djangoは複数のキャッシュ方式をサポートしています.ここでは説明しません.必要に応じて、公式ドキュメントに移動してください.https://docs.djangoproject.com/en/2.1/topics/cache/
3.使用&構成
(1)取付
pip install django-redis
(2)settingsファイルはsettingsに配置する.pyファイルに次のコードを追加します.
# Django
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/9",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
ここではネイティブRedisデータベース、indexは9のデータテーブルを使用しています.
(3)ビュー関数での呼び出し
1.インポート方法:
from django.core.cache import cache
2.呼び出し方法:
最初に/indexにアクセスすると、cacheに「index_page_data」というキーがないため、次のビジネスロジック処理を行い、データベースをクエリーしてデータを取り出し、コンテキストcontextにカプセル化し、フロントエンドに戻る.後で/indexにアクセスして、cacheでkeyのvalueを読めばいいです.
class IndexView(View):
def get(self, request):
''' '''
#
context = cache.get('index_page_data')
if not context:
print(' ')
#
#
context = {
# , key-value
}
#
# key value timeout
cache.set('index_page_data', context, 3600)
#
return render(request, 'index.html', context)
3.キャッシュを変更するタイミング
運営者がDjango-adminバックグラウンドでページを管理し、データベースを削除・変更する操作を行った後、トップページのデータに触れると、トップページの表示が必ず変化し、キャッシュを削除する必要があります.このときコードは
context = cache.get('index_page_data')
キャッシュに「index_page_data」というキーがなくなり、contextはNoneを返します.このとき、次のビジネスロジックを行い、データベースクエリーを行い、最近のデータがフロントエンドに返されたことを検出します.
そこで私たちは対応するアプリケーションappのadmin.pyでは、次の変更を行います.
from django.core.cache import cache
class BaseModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
''' '''
super(BaseModelAdmin, self).save_model(request, obj, form, change)
#
cache.delete('index_page_data')
def delete_model(self, request, obj):
''' '''
super(BaseModelAdmin, self).delete_model(request, obj)
#
cache.delete('index_page_data')
新しいクラスBaseModelAdminはadminから継承されます.ModelAdminでは,添削の際,そのまま親のメソッドを呼び出し,メソッドの末尾にcacheの削除キーの操作を行い,トップページを更新する目的を達成する.
その後、他のモデル管理クラスは、BaseModelAdminを直接継承すればよい.こんな感じで
class GoodsTypeAdmin(BaseModelAdmin):
pass
class IndexGoodsBannerAdmin(BaseModelAdmin):
pass
class IndexTypeGoodsBannerAdmin(BaseModelAdmin):
pass
class IndexPromotionBannerAdmin(BaseModelAdmin):
pass
admin.site.register(GoodsType, GoodsTypeAdmin)
admin.site.register(IndexGoodsBanner, IndexGoodsBannerAdmin)
admin.site.register(IndexTypeGoodsBanner, IndexTypeGoodsBannerAdmin)
admin.site.register(IndexPromotionBanner, IndexPromotionBannerAdmin)
4.まとめ
これでDjangoではRedisをトップページキャッシュとして構成して使用する流れがすべて与えられ,読者は方法を参照してトップページの他の場所にキャッシュを追加することができ,不足があれば指摘を歓迎する.
Best wishes北郵便Renyi