Python web-Django構成はRedisをバックエンドキャッシュとして使用する


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)取付
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