欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

缓存

程序员文章站 2022-06-18 23:19:13
...

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

在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://:[email protected]: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)