Django 缓存

官方文档html

缓存的出现就是为了减轻对数据库的压力和加快内存访问的速度.咱们的访问请求最终都是返回一个大的字符串,缓存就是将这段字符串直接存储起来,下次你来了,不用通过view去数据库或者内存拿到数据再渲染返回,而是直接从缓存里把上次的字符串交给你,很大的提升了速度,通常咱们会将持久不变的,访问量大的数据放到缓存.(好比说一篇好的博客,不少人看,可是做者又不修改),实时性很高的不放缓存,好比博客访问量.python

Django自带缓存,提供了6中存储模式:数据库

  1. 开发调试
  2. 内存
  3. 文件
  4. 数据库
  5. Memcache缓存(python-memcached模块)
  6. Memcache缓存(pylibmc模块)

每种存储模式只须要修改配置就能够了,其余早django中的操做都是同样,django

咱们先来看配置,写在django settings.py里面就ok:缓存

 1 # 此为开始调试用,实际内部不作任何操做
 2     # 配置:
 3         CACHES = {  4             'default': {  5                 'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎
 6                 'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过时,0表示当即过时)
 7                 'OPTIONS':{  8                     'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300)
 9                     'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数以后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
10  }, 11                 'KEY_PREFIX': '',                                             # 缓存key的前缀(默认空)
12                 'VERSION': 1,                                                 # 缓存key的版本(默认1)
13                 'KEY_FUNCTION' 函数名                                          # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
14  } 15  } 16 
17 
18     # 自定义key函数
19     def default_key_func(key, key_prefix, version): 20         """
21  Default function to generate keys. 22 
23  Constructs the key used by all other methods. By default it prepends 24  the `key_prefix'. KEY_FUNCTION can be used to specify an alternate 25  function with custom key making behavior. 26         """
27         return '%s:%s:%s' % (key_prefix, version, key) 28 
29     def get_key_func(key_func): 30         """
31  Function to decide which key function to use. 32 
33  Defaults to ``default_key_func``. 34         """
35         if key_func is not None: 36             if callable(key_func): 37                 return key_func 38             else: 39                 return import_string(key_func) 40         return default_key_func
开发调试
 1 # 此缓存将内容保存至内存的变量中
 2     # 配置:
 3         CACHES = {  4             'default': {  5                 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  6                 'LOCATION': 'unique-snowflake',  7  }  8  }  9 
10     # 注:其余配置同开发调试版本
内存
 1 # 此缓存将内容保存至数据库
 2 
 3     # 配置:
 4         CACHES = {  5             'default': {  6                 'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  7                 'LOCATION': 'my_cache_table', # 数据库表
 8  }  9  } 10 
11     # 注:执行建立表命令 python manage.py createcachetable
数据库
Memcache缓存(python-memcached模块)
Memcache缓存(pylibmc模块)
# 此缓存将内容保存至文件
    # 配置:
 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } } # 注:其余配置同开发调试版本
文件

应用:ide

Django提供的缓存支持memcached

  1. 单独的页面缓存
  2. 页面局部缓存
  3. 全局缓存

1单独的views缓存,存储位置设置为文件函数

Django settings.py 里面配置:url

CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': os.path.join(BASE_DIR,'caches'),#cache的存储位置  } }

views:spa

from django.shortcuts import render from django.views.decorators.cache import cache_page @cache_page(10) # 导入模块后加上装饰器就就完成了单独的页面缓存
import time def cache001(req): t=time.time() return render(req,'cache001.html',{'time':t})
#这里用了一个动态的时间来验证是否缓存



#结果就是第一次发起请求后,整个页面的返回字符串存储到了文件位置,再次访问的时候直接读取到了文件里面的内容返回,因此时间在缓存生命周期里面是不会改变的


页面局部的缓存

不少时候咱们页面只须要一些数据缓存:

settings..py 配置,用了数据库

CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table',  # 数据库表
 } } #写在sttings里面后执行下, python manage.py createcachetable ,就能再数据库中找到表了

局部缓存是写在HTML中的:

#HTNL
 {% load cache %}#加载cache
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>{{ time }}</p> {% cache 5000 mycacher %} #5000表明超时时间, mycacher表明缓存的key, {{ time }} #须要缓存的内容 {% endcache %} </body>
</html>

当我么你发起请求后,数据库缓存表就多了点东西了:

全局缓存:

此次咱们将缓存储存在内存里面,形式会是key value格式,因此会制定一个key:

CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'lglgl',#制定一个内存缓存的引用
 } }

全局缓存会利用到咱们的中间件,在settings middleware中加上下面2个中间件:

MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware',#-----放在最前面,用于储存缓存
        # 其余中间件...
        'django.middleware.cache.FetchFromCacheMiddleware',#----放在最后面,用于获取缓存
    ]

搞定.这就是django 提供的3中缓存方式和集中存储地方,应该说是很强大了.

相关文章
相关标签/搜索