一、django的五种缓存的存储方式
1、调试模式,不对缓存做任何处理,这里主要是学习设置缓存的字段,这些字段在其他的存储方式中均适用
# 此为开始调试用,实际内部不做任何操作 # 配置: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎 'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存个数(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) }, 'KEY_PREFIX': '', # 缓存key的前缀(默认空) 'VERSION': 1, # 缓存key的版本(默认1) 'KEY_FUNCTION' 函数名 # 生成key的函数(默认函数会生成为:【前缀:版本:key】) } } # 自定义key def default_key_func(key, key_prefix, version): """ Default function to generate keys. Constructs the key used by all other methods. By default it prepends the `key_prefix'. KEY_FUNCTION can be used to specify an alternate function with custom key making behavior. """ return '%s:%s:%s' % (key_prefix, version, key) def get_key_func(key_func): """ Function to decide which key function to use. Defaults to ``default_key_func``. """ if key_func is not None: if callable(key_func): return key_func else: return import_string(key_func) return default_key_func
2、内存
# 此缓存将内容保存至内存的变量中 # 配置: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake',#给缓存放置的内存区设置一个名字 } } # 注:其他配置同开发调试版本
3、文件
# 此缓存将内容保存至文件 # 配置: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache',#配置缓存存放的目录 } } # 注:其他配置同开发调试版本
4、数据库
# 此缓存将内容保存至数据库 # 配置: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', # 数据库表 } } # 注:需要执行创建表命令 python manage.py createcachetable,这样会额外创建一张表来存放缓存数据
5、memcache
# 此缓存使用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', ] } }
二、django的缓存的应用,一共有三种方式
1、对某个视图函数生效
from django.views.decorators.cache import cache_page # 1、用法1,为单独的视图函数设置缓存 @cache_page(10) # 这里10是缓存的超时时间 def test_cache(request): import time return HttpResponse(time.time())
2、对某个html文件的的一部分生效,主要是在html中设置
def part_cache(request): return render(request,"part.html",{"v":time.time()})
{% load cache %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 2、缓存的使用方法2,对页面的局部做缓存处理 <h1>不做缓存处理{{ v }}</h1> {% cache 10 part_cache %} <h2>缓存处理{{ v }}</h2> {% endcache %} </body> </html>
3、对全网生效,需要在中间件中设置
# 3、缓存的用法3,全局生效,在中间件中设置 from django.middleware.security import SecurityMiddleware from django.middleware.cache import UpdateCacheMiddleware from django.middleware.cache import FetchFromCacheMiddleware 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', # 定义了2个自定义的中间件 'middle.md.test', 'middle.md.middle_first', 'middle.md.middle_second', "django.middleware.cache.FetchFromCacheMiddleware" ]
生效的权力:全局大于》某个视图函数》某个html局部