Django缓存配置复述,使用详解

  

  

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存。

  

缓存工作原理:缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有用户来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户。

  

Django提供了6种缓存方式:

  
      <李>开发调试缓存李   <李>内存缓存李   <李>文件缓存李   <李>数据库缓存李   <李> Memcache缓存(使用python-memcached模块)   <李> Memcache缓存(使用pylibmc模块)   
  

这里不多介绍,有兴趣的可以去看看官方文档:https://docs.djangoproject.com/en/dev/topics/cache/

  

  

要想在Django配置复述,缓存,则需要先安装依赖:

        pip3安装django-redis      

settings.py配置:

        缓存={   “默认”:{   “后端”:“django_redis.cache.RedisCache”,   “位置”:“复述://127.0.0.1:6379”,   "选项":{   :“CLIENT_CLASS django_redis.client.DefaultClient”,   “CONNECTION_POOL_KWARGS”: {“max_connections”: 100}   #“密码”:“密码”,   }   }   }      

<>强视图中连接(手动操作复述):

        django。快捷方式进口HttpResponse   从django_redis进口get_redis_connection      def指数(请求):   r=get_redis_connection(“违约”)   r。hmset (“name_a”{“key_a”:“value_a”、“key_b”:“value_b”})   返回HttpResponse(“设置复述”)      def命令(要求):   r=get_redis_connection(“违约”)   val=r。hmget (“name_a”(“key_a”、“key_b”))   打印(val) # (b 'value_a”, b 'value_b”)   返回HttpResponse(“获取复述”)      

  

<强>全站使用缓存
  

  

使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存。

        中间件=[   “django.middleware.cache。UpdateCacheMiddleware”, #放在第一   #其他中间件……   “django.middleware.cache。FetchFromCacheMiddleware”, #放在最后   ]      CACHE_MIDDLEWARE_ALIAS=" " #用于存储的缓存别名   CACHE_MIDDLEWARE_SECONDS=600 #每个页面应缓存的秒数   CACHE_MIDDLEWARE_KEY_PREFIX=" " #如果使用相同的Django安装在多个站点之间共享缓存,请将其设置为站点名称或此Django实例特有的其他字符串,以防止发生密钥冲突。如果你不在乎,请使用空字符串。      

测试         django。快捷方式进口HttpResponseimport时间   def指数(请求):   t=time.time ()   返回HttpResponse(“时间:{}”.format (str (t)))      def回家(请求):   t=time.time ()   返回HttpResponse(“时间:{}”.format (str (t)))      

可以发现,索引或者家页面第一次返回的时间是多少,往后10分钟以内,时间都是不变的。

  

单独视图缓存(记得取消全站缓存中间件配置)
  

        django。快捷方式进口HttpResponse   从django.views.decorators.cache进口cache_page   导入的时间      @cache_page (60 * 10)   def指数(请求):   t=time.time ()   返回HttpResponse(“时间:{}”.format (str (t)))      def回家(请求):   t=time.time ()   返回HttpResponse(“时间:{}”.format (str (t)))      

这次、索引页面第一次访问返回的时间需要过10分钟再次访问才能变化,而家页面返回的时间是时时刻刻变化的。

  

模板局部视图使用
  

        # 1。引入TemplateTag   {%加载缓存%}      # 2。使用缓存   {%缓存600名%}#缓存超时(秒)和缓存片段的名称(名称按原样使用)   缓存内容   {% endcache %}      

示例:         # views.py   django。快捷方式进口呈现   导入的时间      def指数(请求):   t=time.time ()   返回渲染(请求,”指数。html ", {“t”: t})

Django缓存配置复述,使用详解