ホームページ > バックエンド開発 > Python チュートリアル > DjangoアプリケーションでRedisを使用してキャッシュする方法

DjangoアプリケーションでRedisを使用してキャッシュする方法

Jennifer Aniston
リリース: 2025-03-02 10:10:11
オリジナル
590 人が閲覧しました

このチュートリアルでは、特にDjangoフレームワーク内で、Pythonアプリケーションのパフォーマンスを高めるためにRedisキャッシングを活用する方法を示しています。 Redisのインストール、Django構成、およびパフォーマンスの比較をカバーして、キャッシュの利点を強調します。

redisとキャッシュの紹介

キャッシュは、データベースのような遅いデータソースを繰り返しクエリするのではなく、頻繁にアクセスできるデータを容易に利用できる場所(キャッシュ)に保存することにより、アプリケーションの速度を大幅に向上させます。 オープンソースのインメモリデータ構造ストアであるRedisは、データベース、キャッシュ、メッセージブローカーとして優れています。 キャッシュから直接データを提供することにより、データベースの負荷を劇的に削減します。

redisのインストール

Ubuntuユーザーの場合、最も単純なインストールには、これらのコマンドが含まれます

でインストールを確認します

Windowsユーザーは、Linux(WSL2)にWindowsサブシステムを使用できます。 まず、WSL2(管理者として実行)を有効にします:
sudo apt-get update
sudo apt install redis
ログイン後にコピー

Microsoftストアからubuntuをインストールし、Ubuntu端末を起動して実行します:
redis-cli --version
ログイン後にコピー

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
ログイン後にコピー

sudo apt-add-repository ppa:redislabs/redis
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install redis-server
sudo service redis-server restart
ログイン後にコピー
django API例:キャッシュ製品データ

How to Cache Using Redis in Django Applications

この例は、Djangoアプリケーションのキャッシュ製品データを示しています。 Redisと対話するために

を使用します。

前提条件:

django-redis

django

  • redis
  • django-redis(パフォーマンステスト用)
  • プロジェクトのセットアップ:loadtest

プロジェクトディレクトリと仮想環境を作成します 仮想環境をアクティブにし、依存関係をインストールします:

  1. djangoプロジェクトとアプリを作成します:
pip install django==1.9 django-redis djangorestframework
ログイン後にコピー
  1. および
を追加します
django-admin startproject django_cache
cd django_cache
python manage.py startapp store
ログイン後にコピー
  1. storerest_frameworkモデルを作成します INSTALLED_APPS settings.py

  2. 移行の実行:

    Product store/models.py

  3. スーパーユーザーを作成し、データベースにサンプルデータを入力します。
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField(null=True, blank=True)
    price = models.IntegerField(null=True, blank=True)
    date_created = models.DateTimeField(auto_now_add=True, blank=True)
    date_modified = models.DateTimeField(auto_now=True, blank=True)

    def __str__(self):
        return self.name

    def to_json(self):
        return {
            'id': self.id,
            'name': self.name,
            'desc': self.description,
            'price': self.price,
            'date_created': self.date_created,
            'date_modified': self.date_modified
        }
ログイン後にコピー
    djangoでRedisの構成:
以下を
python manage.py makemigrations store
python manage.py migrate
ログイン後にコピー
    に追加します
ビューとurlの作成:

製品を取得するためのエンドポイントを使用して(キャッシュなしの有無にかかわらず):

settings.pycreate

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}
ログイン後にコピー

メインに

store/views.py

from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.core.cache import cache
from .models import Product

@api_view(['GET'])
def view_products(request):
    products = Product.objects.all()
    results = [p.to_json() for p in products]
    return Response(results)

@api_view(['GET'])
def view_cached_products(request):
    products = cache.get('products')
    if products:
        return Response(products)
    else:
        products = Product.objects.all()
        results = [p.to_json() for p in products]
        cache.set('products', results)
        return Response(results)
ログイン後にコピー
でのパフォーマンステスト

インストールstore/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.view_products),
    path('cached/', views.view_cached_products),
]
ログイン後にコピー
両方のエンドポイントのテストを実行して、パフォーマンスを比較します。 キャッシュされたエンドポイントは、最初のキャッシュ母集団の後、1秒あたりの大幅に改善されたリクエストを表示するはずです。

結論:

このチュートリアルは、DjangoアプリケーションへのRedisキャッシュの簡単な統合を示しており、その結果、実質的なパフォーマンスの向上が生じています。 Redisのメモリ内の性質と使いやすさにより、アプリケーション速度の向上とサーバーの負荷の削減に最適です。 アプリケーションのパフォーマンスとリソースの利用を最適化するために、キャッシュ戦略を検討することを忘れないでください。

(Openai Dall-eによって生成されたサムネイル画像を投稿)

以上がDjangoアプリケーションでRedisを使用してキャッシュする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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