Django 内置数据库缓存 redis缓存 多缓存

一、内置数据库缓存

  • 1、首先创建一个数据库

  • 2、创建一个缓存表 python manage.py createcachetable my_cache_table
    在这里插入图片描述

  • 3、项目目录结构:
    在这里插入图片描述
    自己配置好 appcache,urls 等

  • 3、settings 配置

CACHES = {
    'default':{
        # django 内置缓存 数据库形式 性能相对较低
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
        'TIMEOUT': 60 * 5
        	}
        }
  • 4、templates
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<ul>
    {% for news in news_list %}
        <li>{{ news }}</li>
    {% endfor %}
</ul>

</body>
</html>
  • 4、appcache.views

方式一:使用装饰器方式缓存

from django.core.cache import cache
from django.core.cache import caches
from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators.cache import cache_page
from time import sleep

# Django 内置的数据库缓存 性能还是相对比较低
@cache_page(30)
def news(request):
    news_list = []
    for i in range(10):
        news_list.append(f"这是新闻{i}")
    sleep(5)
    data = {
        "news_list":news_list
    }
    return render(request,'news.html',context=data)

方式二:使用主动查询去缓存

def news2(request):

    result = cache.get("news")

    if result:
        return HttpResponse(result)

    news_list = []
    for i in range(10):
        news_list.append(f"这是新闻{i}")
    sleep(5)
    data = {
        "news_list":news_list
    }

    response = render(request,'news.html',context=data)

    cache.set("news",response.content,timeout=60)

    return response

二、redis缓存数据

备注:其实就是把这个内容给替换一下,我这直接不替换了,直接再增加一个字典,redis的

在这里插入图片描述
在这里插入图片描述

  • appcache.views

方式一:使用装饰器的方式缓存

@cache_page(30,cache='redis_backend')
def news3(request):
    news_list = []
    for i in range(10):
        news_list.append(f"这是新闻{i}")
    sleep(5)
    data = {
        "news_list":news_list
    }
    return render(request,'news.html',context=data)

方式二:使用主动查询方式缓存

def news4(request):

    cache = caches['redis_backend']

    result = cache.get("news")

    if result:
        return HttpResponse(result)

    news_list = []
    for i in range(10):
        news_list.append(f"这是新闻{i}")
    sleep(5)
    data = {
        "news_list":news_list
    }

    response = render(request,'news.html',context=data)

    cache.set("news",response.content,timeout=60)

    return response

小记:

1、当我们使用一种方式缓存:

在这里插入图片描述
views:

方式一:

  • from django.views.decorators.cache import cache_page

  • @cache_page(30)

方式二:

  • from django.core.cache import cache
  • result = cache.get(“news”)
  • response = render(request,‘news.html’,context=data)
  • cache.set(“news”,response.content,timeout=60)

2、当我们使用多种方式缓存:

在这里插入图片描述
views:

方式一:

  • from django.views.decorators.cache import cache_page
  • @cache_page(30,cache=‘redis_backend’)

方式二:

  • from django.core.cache import caches
  • cache = caches[‘redis_backend’]
  • result = cache.get(“news”)
  • response = render(request,‘news.html’,context=data)
  • cache.set(“news”,response.content,timeout=60)

综上所述:还是装饰器方便,多种缓存也不怕

  • from django.views.decorators.cache import cache_page
  • @cache_page(30,cache=‘redis_backend’)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值