缓存数据存放位置
普通 数据库
文件系统
内存
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('你好世界')