目录

  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)