django缓存

2017-10-05  本文已影响0人  戴维得

缓存就是将你常用的数据放在内存里面,方便大量的访问,每次请求过来之后,django都会优先访问缓存,看看缓存里面有没有需要的数据,如果没有的话,再从数据库里面取,缓存里面的数据都有超时时间,如果超时间的话就会从数据库里面进行更新,一般情况下缓存都是另外一台机器的内存,也可能放到文件等其他容易访问的地方,django 里面可以直接调用缓存

缓存在内存中

配置

CACHES = {
                'default': {
    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    'LOCATION': 'unique-snowflake',
    'TIMEOUT': 300,       
    'OPTIONS':{
            'MAX_ENTRIES': 300,          
            'CULL_FREQUENCY': 3,    
                    }
                }
            }

应用

装饰器 @chche_page(缓存时间)

# 单独视图函数:粒度适中
from django.views.decorators.cache import cache_page

@cache_page(5)
def test(request):
# user_list = models.UserInfo.objects.all()
ctime = time.time()
return render(request,'test.html',{'ctime':ctime})

缓存在文件中

配置

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': 'D:\cache', #缓存文件路径
        'TIMEOUT': 300,     # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
            'OPTIONS':{
                'MAX_ENTRIES': 300,   # 最大缓存个数(默认300)
                'CULL_FREQUENCY': 3,     # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
                    }
                }
            }

Memcache缓存

需要找一台大内存的及其然后安装memcache软件

链接那台机器 。。。待续...

配置

CACHES = {
                'default': {
                    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
                    'LOCATION': '127.0.0.1:11211',
                    'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
                    'OPTIONS':{
                        'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300)
                        'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
                    }
                }
            }

应用

粒度适中

加载哪个视图函数中就在哪个视图函数中应用,装饰器 @chche_page(缓存时间)

# 单独视图函数:粒度适中
from django.views.decorators.cache import cache_page

@cache_page(5)
def test(request):
# user_list = models.UserInfo.objects.all()
ctime = time.time()
return render(request,'test.html',{'ctime':ctime})

全站缓存,粒度大

全站缓存可以使用中间件了

请求经过一层层中间件到最后一个中间件的时候应该进入读取缓存,第一次的时候没有缓存,然后返回最后一个中间件,这时进入视图函数进入数据库取数据,当数据返回的时候数据从最后一个中间件开始经过中间件直到返回到第一个中间件的时候将数据加载进缓存并且给用户

加中间件

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',
  'django.middleware.cache.FetchFromCacheMiddleware',  # 结束缓存中间件
                ]
CACHE_MIDDLEWARE_SECONDS = 5 # 设定缓存时间,优先级比默认高

局部缓存,粒度小

在HTML页面中

{% load cache %}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Title</title>
  </head>
  <body>
    <h1>{{ ctime }}</h1>

    {% cache 5 'xxxxxfdfdf' %}    <!--5表示缓存时间,后面的key可以随便写-->
    <h1>{{ ctime }}</h1>
    {% endcache %}

  </body>
</html>
上一篇下一篇

猜你喜欢

热点阅读