缓存

缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。

在Django中,当用户请求到达视图后,视图会先从数据库提取数据放到模板中进行动态渲染,渲染后的结果就是用户看到的网页。如果用户每次请求都从数据库提取数据并渲染,将极大降低性能,不仅服务器压力大,而且客户端也无法即时获得响应。如果能将渲染后的结果放到速度更快的缓存中,每次有请求过来,先检查缓存中是否有对应的资源,如果有,直接从缓存中取出来返回响应,节省取数据和渲染的时间,不仅能大大提高系统性能,还能提高用户体验。

缓存使用场景:缓存主要适用于对页面实时性要求不高的页面。存放在缓存的数据,通常是频繁访问的,而不会经常修改的数据。

缓存方式:数据库、文件、内存、redis等

1 缓存配置

  • 数据库缓存

        # settings.py
        CACHES = {
            'default':{
                'BACKEND':'django.core.cache.backends.db.DatabaseCache',
                'LOCATION':'my_cache_table',
            }
        }
        #生成缓存表
        python manage.py createcachetable
    
    • 文件缓存

    CACHES = {

    #  'default': {
    #   'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定缓存使用的引擎
    #   'LOCATION': '/var/tmp/django_cache',        #指定缓存的路径
    #   'TIMEOUT':300,              #缓存超时时间(默认为300秒,None表示永不过期)
    #   'OPTIONS':{
    #    'MAX_ENTRIES': 300,            # 最大缓存记录的数量(默认300)
    #    'CULL_FREQUENCY': 3,           # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
    #   }
    #  }
    # }
    
    • redis缓存
      需要安装:pip3 install django-redis
  CACHES = {
          'default':{
              'BACKEND':'django_redis.cache.RedisCache',#指定缓存类型 redis缓存
              'LOCATION':'redis://:123@127.0.0.1:6379/1', #缓存地址,@前面是reids的密码,如果没有则去掉
             # 'LOCATION':'redis://127.0.0.1:6379/1', # 没密码
          }
      }

2 缓存使用

  • 视图函数
    from django.views.decorators.cache import cache_page
    @cache_page(60 * 0.5) #缓存过期时间
    def dbcache(request):
    return render(request,‘index.html’,context={‘content’:77665})

  • 模板局部缓存

    {% load cache %}
    <!DOCTYPE html>
    < html lang="en">
    < head>
        < meta charset="UTF-8">
        < title>Title< /title>
    < /head>
    < body>
    {% cache 30 'content' %}
    {{ content }}
    {% endcache %}
    < /body>
    < /html>
    
  • 全站缓存

  MIDDLEWARE = [
      'django.middleware.cache.UpdateCacheMiddleware',
      .....
      'django.middleware.cache.FetchFromCacheMiddleware',
  ]
  CACHE_MIDDLEWARE_SECONDS = 20  #设置超时时间 20秒
  • 手动设置缓存
    • 设置缓存:cache.set(key,value,timeout)
    • 获取缓存:cache.get(key)
  def myCache(req):
  	    从缓存获取页面
      mycache = cache.get('mycache')
      if mycache:
          print('走缓存了')
          html = mycache
      else:
          print('没走缓存')
          tem = loader.get_template('mycache.html')
          html = tem.render({'con':'缓存测试的模板'})
          cache.set('mycache',html,60)
      return HttpResponse(html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值