Web アプリケーションまたは分散システムを開発する場合、キャッシュは一般的なソリューションの 1 つであり、システムのパフォーマンスを大幅に向上させることができます。 Python では、メモリ キャッシュ (たとえば、functools.lru_cache
を使用) または外部ストレージ (たとえば、Redis を使用) を使用して、キャッシュ関数を実装できます。
Django は、キャッシュを含む多くの機能モジュールが組み込まれている非常に人気のある Python Web フレームワークです。 Django フレームワークのデフォルトのキャッシュ バックエンドはメモリ キャッシュですが、実際のアプリケーションではメモリ キャッシュが OOM (メモリ不足) エラーを引き起こしやすいため、Django プロジェクトを Redis などの外部キャッシュ サービスに接続する必要があります。
Redis にアクセスするには、django-redis
Django プラグインを使用できます。まず、プロジェクトの settings.py
ファイルで、Redis 接続情報を構成する必要があります。例:
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } }
ここでは、デフォルトの django-redis## を使用します。 #キャッシュ終了後。
LOCATION パラメータは Redis 接続のアドレスとポートを指定し、
OPTIONS パラメータの
CLIENT_CLASS パラメータは Redis 接続クライアントのクラス名を指定します。
cache オブジェクトを使用してキャッシュ操作を実行できます。例:
from django.core.cache import cache ... data = cache.get(key) if not data: data = db.query(...) cache.set(key, data, timeout=60)ここでは
cache.get Get を使用します。キャッシュされたデータ。キャッシュにデータがない場合は、データベース クエリ操作を使用してデータを取得し、
cache.set を通じてデータをキャッシュに書き込みます。
timeout パラメーターは、キャッシュされたデータの有効期限を秒単位で指定します。
django.views.decorators.cache モジュールで提供されるデコレーターを使用できます。
cache_pageデコレータは、ビューの応答結果を Redis にキャッシュできます。例:
from django.views.decorators.cache import cache_page ... @cache_page(60) def my_view(request): ...ここでは
を使用します。 cache_pageDecorator は、ビューの応答結果を 60 秒の有効期限で Redis にキャッシュします。
cache_pageデコレータは関数ビューにのみ使用でき、クラス ビューには使用できないことに注意してください。これは関数を装飾するデコレーターであり、クラスビューのメソッドを直接装飾することができないためです。したがって、Django フレームワークは、この問題を解決するために
method_decorator を提供します。
method_decorator は、クラスを装飾するためのデコレーターです。例:
from django.utils.decorators import method_decorator from django.views.decorators.cache import cache_page @method_decorator(cache_page(timeout=60), name='get') class MyView(View): ...ここでは、
method_decorator を使用して、
cache_page デコレータをクラス ビューの
get メソッドに適用します。
def my_view(request): # 先尝试从缓存中获取数据 data = cache.get(key) if not data: # 如果缓存中没有数据,则查询数据库 data = db.query(...) # 将查询结果缓存到Redis中 cache.set(key, data, timeout=60) return HttpResponse(data)ここでは、
cache.get を使用して Redis からデータを取得しようとします。取得できない場合は、データベース クエリ操作を実行し、クエリ結果を Redis に書き込みます。 。
cache と
caches を提供していることに注意してください。キャッシュ上の読み取りおよび書き込み操作は、
get および
set メッセージを
cache オブジェクトに送信することで実現できますが、この方法で実行できる操作は次のとおりです。限定。キャッシュをより柔軟に操作する必要がある場合は、
caches['default'] を使用して指定されたキャッシュ サービスを取得し、それを操作できます。例:
from django.core.cache import caches ... redis_cli = caches['default'].clientキャッシュ関連の問題キャッシュはパフォーマンスを最適化する非常に効果的な手段ですが、実際のアプリケーションでは、予期しないエラーを避けるためにいくつかのキャッシュ関連の問題に注意する必要があります。 。 キャッシュなだれキャッシュなだれとは、キャッシュ内の大量のデータが同時に期限切れになったり、キャッシュサーバーがダウンしたりすることにより、キャッシュが無効になり、データベースに対する圧力が瞬間的に増大したり、場合によっては崩壊したりする可能性があります。キャッシュなだれを回避するには、次の方法を使用できます。
キャッシュにないデータについては、データベースへの直接アクセスの要求を避けるためにデフォルト値を設定できます。
ブルーム フィルターを使用して、キャッシュに存在しないデータを記録し、データベースへの直接アクセスを回避します。
データベースへの不正なアクセス要求を避けるために、要求パラメーターを確認してください。
以上がPython キャッシュを使用してデータ アクセス速度を向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。