一、django缓存的几种方式及配置
#Django中提供了6种缓存方式: 开发调试 (开发调试使用) 内存(不做配置默认:默认配置是Django内置配置文件(用户不可见)设置在内存里面) 文件 数据库 Memcache缓存(python-memcached模块) Memcache缓存(pylibmc模块) #Django的缓存到底存储在哪里是根据Django的 setings.py配置文件来决定的!
配置缓存,在Django项目的settings.py中配置
1、缓存至内存(默认)
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',#缓存到内存 'LOCATION': 'XXOO', #在内存中存储的变量(保证唯一) 'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存个数(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,Django会自动清空3/1 ,设置为10 就剔除10/1 } } }
2、缓存至目录文件
#如果把数据缓存至本地目录,和去数据库里获取数据有什么区别? 1、缓存的内容和数据库里不一样,文件中是经过模板渲染处理好的整体数据;而去数据库获取数据还需要模板渲染进行加工处理; 2、距离不一样,缓存到本地目录,而Django连接数据库需要socket;
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var', #设置缓存文件的目录 } }
3、缓存到数据库
#优点:相对于缓存至文件,少了模板渲染
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', # 数据库表 } }
4、缓存到Memcache数据库(Python-memcached模块)
# 此缓存使用python-memcached模块连接memcache CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', #通过网络socket连接,缓存到单台服务的 memcache数据库 } } CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'unix:/tmp/memcached.sock', #通过本地文件socket,缓存本机memcache数据库 } } #通过网络socket连接,缓存到memcache 集群 CACHES = { #其中 6和89为 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ ('172.19.26.240:11211',6), ('172.19.26.242:11211',89), ] } }
4a、Memcache缓存(Pylibmic模块)
# 此缓存使用pylibmc模块连接memcache CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211', } } CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '/tmp/memcached.sock', } } CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', ] } }
5、缓存至redis
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "123", } } }
二、应用
视图函数使用缓存
##只需要配置一个装饰器即可 from django.views.decorators.cache import cache_page #装饰器导入位置 import time from .models import * @cache_page(15) #超时时间为15秒 def index(request): t=time.time() #获取当前时间 bookList=Book.objects.all() return render(request,"index.html",locals())
全站缓存
#在中间件中配置,注意最上最下的顺序 MIDDLEWARE_CLASSES = ( 'django.middleware.cache.UpdateCacheMiddleware', #最上'django.middleware.cache.FetchFromCacheMiddleware', #最下 ) #缓存的时间,单位为秒 CACHE_MIDDLEWARE_SECONDS=10
局部视图缓存
{% load cache %} {#1、首先加载缓存#} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> {% cache 5000 缓存key %} {# 缓存时间 别名#} <p>缓存内容</p> {% endcache %}