Django中的缓存机制

缓存数据存放位置

        普通 数据库

        文件系统

        内存

        redis

配置 redis 缓存

安装 redis

 pip install django-redis

在 settings 中配置 

# 配置 redis 缓存
CACHES = {
    'default':{
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    }
}
整站缓存

在中间件中开头和结尾加两句中间件

# 开头
    'django.middleware.cache.UpdateCacheMiddleware',
# 结尾
    'django.middleware.cache.FetchFromCacheMiddleware'

settings.py

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 'the_15.middleware.simple_middleware',
    # 'the_15.middleware.Mwi',
    'django.middleware.cache.FetchFromCacheMiddleware'
]

还要加上缓存到哪里,和 持续多久时间

CACHE_MIDDLEWARE_SECONDS = 600  # 持续多少秒
CACHE_MIDDLEWARE_ALIAS = 'default'  # 缓存到哪里

 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'
        }
    }
}
CACHE_MIDDLEWARE_SECONDS = 600  # 持续多少秒
CACHE_MIDDLEWARE_ALIAS = 'default'  # 缓存到哪里

运行 - 查看


 

视图缓存

引入

from django.views.decorators.cache import cache_page

views.py

from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators.cache import cache_page


# Create your views here.

@cache_page(60)  # 生命周期 60秒
def view_caching(request):
    print('hello cache')
    return HttpResponse('hello world')

这里不需要整站缓存的中间件,不然没效果

MIDDLEWARE = [
    # 'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 'the_15.middleware.simple_middleware',
    # 'the_15.middleware.Mwi',
    # 'django.middleware.cache.FetchFromCacheMiddleware'
]

运行—— 查看

进入数据库查看

redis-cli —— 进入

select —— 查看第几个

keys * —— 查看缓存数据

ttl 跟上缓存数据 —— 查看过期时间

get 跟上缓存数据 —— 查看缓存对象

ctrl+c 退出

自定义缓存的库
from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators.cache import cache_page


# Create your views here.

@cache_page(60,  # 生命周期 60秒
            cache='mine'  # 自定义缓存的库
            )
def view_caching(request):
    print('hello cache')
    return HttpResponse('hello world')
# 配置 redis 缓存
CACHES = {
    'default':{
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    },
    'mine':{
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/10',  # /10 第10个库
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    }
}
url 路由 写视图缓存

views.py

def hello(request):
    print('world cache')
    return HttpResponse('你好')

urls.py

from django.urls import path
from .views import view_caching, hello
from django.views.decorators.cache import cache_page

app_name = 'the_18'  # 命名空间
urlpatterns = [
    path('view_caching/', view_caching),
    path('hello/', cache_page(100,cache='mine')(hello)),
]
模板片段缓存
{#声明#}
{% load loa %}
{% load cache %}

<h1>这是the_20_tamplate_cache的页面</h1>
{#200 缓存超时200秒 , muyi 缓存片段的名字#}
{% cache 200 muyi %}
{% teg 1 2 3 %}
{% endcache %}

def template_cache(request):
    return render(request, 'the_20/tamplate_cache.html')
from django.urls import path
from .views import view_caching, hello, template_cache
from django.views.decorators.cache import cache_page

app_name = 'the_18'  # 命名空间
urlpatterns = [
    path('view_caching/', view_caching),
    path('hello/', cache_page(100,cache='mine')(hello)),
    path('template_cache/', template_cache),
]

默认在1号数据库

自定义 指定数据库 —— template_fragments

# 配置 redis 缓存
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    },
    'mine': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/10',  # /10 第10个库
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    },
    'template_fragments': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/14',  # /14 第14 号数据库
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    }
}

更细粒度的缓存控制 
cache
def index(request):
    # 缓存快
    cache.set('hk', 'hello world')
    print(cache.get('hk'))
    return HttpResponse('你好世界')

urls.py

from django.urls import path
from .views import view_caching, hello, template_cache, index
from django.views.decorators.cache import cache_page

app_name = 'the_18'  # 命名空间
urlpatterns = [
    path('view_caching/', view_caching),
    path('hello/', cache_page(100,cache='mine')(hello)),
    path('template_cache/', template_cache),
    path('index/', index),
]

默认选择1号数据库

 caches
def index(request):
    # 缓存快
    cache.set('hk', 'hello world')
    print(cache.get('hk'))
    # mine 代表需要使用的数据库
    caches['mine'].set('changsha','guizhou')
    return HttpResponse('你好世界')

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值