Django中使用不同种类缓存的完整案例

2025-04-06T18:49:51+08:00 | 4分钟阅读 | 更新于 2025-04-06T18:49:51+08:00

Macro Zhao

Django中使用不同种类缓存的完整案例

推荐超级课程:

@TOC

在本教程中,我们将涵盖所有类型的Django缓存并附上示例。最后,你将拥有一个展示每种缓存类型的工作Django项目:

  1. 视图级别缓存
  2. 模板片段缓存
  3. 低级别缓存
  4. 数据库缓存
  5. 基于文件的缓存
  6. Memcached
  7. Redis缓存

步骤1:设置Django项目

首先,创建一个新的Django项目和应用程序:

django-admin startproject django_cache_project  
cd django_cache_project  
python manage.py startapp blog

settings.py中的INSTALLED_APPS列表中添加blog

# settings.py  
INSTALLED_APPS = [  
    'django.contrib.admin',  
    'django.contrib.auth',  
    'django.contrib.contenttypes',  
    'django.contrib.sessions',  
    'django.contrib.messages',  
    'django.contrib.staticfiles',  
    'blog',  # 添加博客应用  
]

步骤2:设置URL路由

django_cache_project/urls.py中,包含blog应用的URLs:

# django_cache_project/urls.py  
from django.contrib import admin  
from django.urls import path, include  
  
urlpatterns = [  
    path('admin/', admin.site.urls),  
    path('', include('blog.urls')),  # 包含博客URLs  
]

blog应用内创建一个urls.py文件:

# blog/urls.py  
from django.urls import path  
from . import views  
  
urlpatterns = [  
    path('', views.index, name='index'),  
    path('fragment/', views.fragment_cache_example, name='fragment_cache'),  
    path('low-level/', views.low_level_cache_example, name='low_level_cache'),  
]

步骤3:视图级别缓存示例

views.py中,应用cache_page装饰器以缓存整个视图15分钟:

# blog/views.py  
from django.shortcuts import render  
from django.views.decorators.cache import cache_page  
import time  
  
@cache_page(60 * 15)  # 缓存此视图15分钟  
def index(request):  
    current_time = time.strftime("%Y-%m-%d %H:%M:%S")  
    context = {'time': current_time}  
    return render(request, 'blog/index.html', context)

创建一个简单的模板 index.html

<!-- blog/templates/blog/index.html -->  
<!DOCTYPE html>  
<html>  
<head>  
    <title>Django缓存示例</title>  
</head>  
<body>  
    <h1>视图级别缓存示例</h1>  
    <p>当前时间:{{ time }}</p>  
</body>  
</html>

步骤4:模板片段缓存示例

对于同时包含动态和静态内容的页面,使用模板片段缓存:

# blog/views.py  
def fragment_cache_example(request):  
    current_time = time.strftime("%Y-%m-%d %H:%M:%S")  
    return render(request, 'blog/fragment.html', {'time': current_time})

创建模板 fragment.html

<!-- blog/templates/blog/fragment.html -->  
{% load cache %}  
<!DOCTYPE html>  
<html>  
<head>  
    <title>Django片段缓存示例</title>  
</head>  
<body>  
    <h1>模板片段缓存示例</h1>  
      
    <p>非缓存部分:{{ time }}</p>  
  
    {% cache 300 cached_section %}  
    <p>缓存部分:{{ time }}</p>  
    {% endcache %}  
</body>  
</html>

在这个例子中,被 {% cache 300 %} 包围的部分将被缓存5分钟(300秒),而页面的其余部分保持动态。

步骤5:低级别缓存示例

使用Django的低级别缓存API手动缓存特定数据:

# blog/views.py  
from django.core.cache import cache  
  
def low_level_cache_example(request):  
    data = cache.get('expensive_data')  
    if not data:  
        data = "这是一些昂贵的数据库计算。"  
        cache.set('expensive_data', data, timeout=60 * 5)  # 缓存5分钟  
  
    return render(request, 'blog/low_level.html', {'data': data})

创建模板 low_level.html

<!-- blog/templates/blog/low_level.html -->  
<!DOCTYPE html>  
<html>  
<head>  
    <title>Django低级别缓存示例</title>  
</head>  
<body>  
    <h1>低级别缓存示例</h1>  
    <p>{{ data }}</p>  
</body>  
</html>

步骤6:配置缓存后端

  1. 基于文件的缓存

settings.py 中添加以下内容以使用基于文件的缓存:

# settings.py  
CACHES = {  
    'default': {  
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  
        'LOCATION': '/var/tmp/django_cache',  
    }  
}
  1. 数据库缓存

要使用数据库缓存后端,首先创建一个缓存表:

python manage.py createcachetable

然后在 settings.py 中配置缓存:

CACHES = {  
    'default': {  
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  
        'LOCATION': 'my_cache_table',  
    }  
}
  1. Memcached

要使用Memcached,安装 pymemcache 包:

pip install pymemcache

settings.py 中配置Memcached:

CACHES = {  
    'default': {  
        'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache',  
        'LOCATION': '127.0.0.1:11211',  
    }  
}
  1. Redis缓存

要使用Redis,请安装django-redis包:

pip install django-redis

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',  
        }  
    }  
}

步骤7:运行项目

  1. 应用迁移并运行服务器:
python manage.py migrate  
python manage.py runserver
  1. 在浏览器中访问以下URL以查看不同的缓存示例:

步骤8:缓存失效

要手动使缓存失效,请使用cache.delete()方法。例如,要删除在低级别示例中设置的缓存:

cache.delete('expensive_data')

结论

在本教程中,我们探讨了不同类型的Django缓存技术,并附有实际示例。缓存是一种强大的优化应用程序性能的方法,可以减少数据库负载并提高响应时间。尝试在您的项目中使用每种缓存方法,并查看性能改进!

如果您喜欢这篇文章,请点击下面的👍按钮,以便其他人也可能发现它有用。

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee