目录
Django 安装django redis
Django redis缓存种类
Django 安装Redis
1. 安装 django redis
pip3 install django-redis
2. 在项目中settings.py文件,添加如下配置。
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache", # 引擎
"TIMEOUT": 300, # 缓存超时时间。默认300,None表示永不过期,0表示立即过期
"LOCATION": "redis://127.0.0.1:6379/1", # 1表是代表redis中那个库
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "mysecret", # 密码
"CONNECTION_POOL_KWARGS": {"max_connections": 100} # 连接池最大连接数
}
}
}
3. 创建缓存数据表
python manage.py createcachetable
Django redis缓存种类
1. views视图缓存
# 视图缓存
from django.shortcuts import render
from django.views.decorators.cache import cache_page
from cache.models import Foo
# 在需要缓存的视图上添加装饰器, 参数是设置timeout 超时时间, 单位是秒,
@cache_page(60)
def index(request):
bar = Foo.objects.all()
return render(request, 'cache/index.html', {'bar': bar})
2. 模板缓存
步骤I. 引入TemplateTag
{% load cache %}
步骤II. 使用缓存
{% cache 5000 缓存key %}
缓存内容
{% endcache %}
{% load cache %}
{% cache 500 'cache_name' %}
<div>container</div>
{% endcache %}
3. 站点缓存(缓存整个网站)
MIDDLEWARE = [
# 站点缓存 , 注意必须在第一个位置
'django.middleware.cache.UpdateCacheMiddleware',
# ...
# 站点缓存, 注意必须在最后一个位置
'django.middleware.cache.FetchFromCacheMiddleware',
]
案例:缓存视图
1. setting.py
# 缓存配置
CACHES = {
"default": {
# 引擎
"BACKEND": "django_redis.cache.RedisCache",
# 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
'TIMEOUT': 300,
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
# "PASSWORD": "mysecret"
}
}
}
2. app/urls.py
# 缓存测试
url(r'^cache1/$', views.cache1,name="cache1"),
url(r'^cache2/$', views.cache2,name="cache2"),
3. app/views.py
import datetime
from django.views.decorators.cache import cache_page
from django.core.cache import cache
# 缓存整个视图函数
@cache_page(10)
def cache1(request):
t = datetime.datetime.now()
return HttpResponse(t)
# 在视图函数中缓存一部分内容
def cache2(request):
# 判断缓存是否存在数据
a = cache.get('time',None)
if a:
print('缓存中存在数据')
print(a)
else:
# 从模型中获取的数据
a = datetime.datetime.now()
cache.set('time',a,10)
print('缓存中,不存在数据,查询并缓存')
print(a)
# 不需要缓存的数据
t = datetime.datetime.now()
print(t)
return HttpResponse(t)