django的缓存机制

django的缓存机制

缓存在哪?

文件缓存

数据库缓存

缓存的位置配置

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定缓存使用的引擎
  'LOCATION': 'D:\django_cache',        #指定缓存的路径
  'TIMEOUT':300,              #缓存超时时间(默认为300秒,None表示永不过期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,            # 最大缓存记录的数量(默认300)
   'CULL_FREQUENCY': 3,           # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
  }
 }
}

 

缓存的粒度: 也就是 缓存单个页面,缓存所有,缓存页面的某个地方

缓存单个页面也就是在视图函数上加个装饰器

from  django.views.decorators.cache import cache_page
@cache_page(5) #5s后才会变
def test_cache(request):
    p = Person('egon',18)
    cache.set('obj',p)


    ctime = time.time()
    return render(request,'index.html',context={'ctime':ctime})

页面局部缓存 在html页面时

{ % load cache %}

{% cache 5 ‘name’} #‘name’ 也就是理解成取名字 如果在其他部位也要缓存,不撞名字就行 

写上要缓存的内容就行

{% endcache %}

全站缓存 需要在中间件上配两个中间件 一个重写 process_response 一个重写 process_request方法 ,在settings文件中配置即可

'django.middleware.cache.UpdateCacheMiddleware', #全站缓存 重写response 放在第一个
'django.middleware.cache.FetchFromCacheMiddleware', #重写request 全站缓存 放在最后一个 请求走的时候是从下往上走,所以它要放在最下面 而response放在第一个
CACHE_MIDDLEWARE_SECONDS = 5 #缓存时间

 

前后端分离缓存的使用 先举个例子就是 访问a页面可以实例化得到一个对象,而访问b页面时可以直接拿到这个缓存的对象并不需要重新生成

from django.core.cache import cache
#视图1
obj = Person(*args,**kwargs)
cache('obj',obj)





#视图2
obj = cache.get('obj') #可以直接拿到视图一中的obj对象

 

 

 

 

 

  

 

posted @ 2021-07-09 17:18  不想拖累他人  阅读(109)  评论(0)    收藏  举报