• django缓存


    1. django中使用缓存需要在settings中配置(缓存方式): 

    缓存的本质就是: 提高网站的并发量
    三种粒度: 全站缓存
                 单页面缓存
                 页面局部缓存

    六种缓存方式:
      django中使用缓存:
      第一步: 在settings中配置(缓存方式)
    CACHES = {
     'default': {
    # 缓存后台使用的引擎
      'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  
     # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期)
      'TIMEOUT': 300,           
      'OPTIONS':{
     # 最大缓存记录的数量(默认300)
       'MAX_ENTRIES': 300,   
     # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)      
       'CULL_FREQUENCY': 3,         
      },
     }
    }
    开发模式调试
    CACHES = {
     'default': {
      'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # 指定缓存使用的引擎
      'LOCATION': 'unique-snowflake',         # 写在内存中的变量的唯一值 
      'TIMEOUT':300,             # 缓存超时时间(默认为300秒,None表示永不过期)
      'OPTIONS':{
       'MAX_ENTRIES': 300,           # 最大缓存记录的数量(默认300)
       'CULL_FREQUENCY': 3,          # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
      }  
     }
    }
    内存缓存(将缓存内容保存至内存区域中)
    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)
      }
     }   
    }
    文件缓存(把缓存数据存储在文件中)
    ########创建缓存的数据库表使用的语句:python manage.py createcachetable
    
    CACHES = {
     'default': {
      'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  # 指定缓存使用的引擎
      'LOCATION': 'cache_table',          # 数据库表    
      'OPTIONS':{
       'MAX_ENTRIES': 300,           # 最大缓存记录的数量(默认300)
       'CULL_FREQUENCY': 3,          # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
      }  
     }   
    }
    数据库缓存(把缓存数据存储在数据库中
      第二步: 使用缓存
    views:
                    from django.views.decorators.cache import cache_page
                        @cache_page(5)
                         def cache_test(request):
                             ctime = time.time()
                             return render(request, 'index.html', locals())
    index:
         <!DOCTYPE html>
                        <html lang="en">
                        <head>
                        <meta charset="UTF-8">
                        <title>Title</title>
                        </head>
                        <body>
                            当前时间为{{  ctime  }}
                        </body>
                        </html>
    使用单页面缓存(装饰器)
    views:
    from django.views.decorators.cache import cache_page
    import time
    from .models import *
    def index(request):
         t=time.time()      #获取当前时间
         return render(request,"index.html",locals())
    
    
    index: 
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {% load cache %}
     <h3 style="color: green">不缓存:-----{{ ctime }}</h3>
    
    {% cache 2 'ctime' %}
     <h3>缓存:-----:{{ ctime }}</h3>
    {% endcache %}
    
    </body>
    </html>
    页面局部缓存
    在 MIDDLEWARE_CLASSES 中加入 “update” 和 “fetch” 中间件
    MIDDLEWARE_CLASSES = (
        # 重写process_response方法    
        ‘django.middleware.cache.UpdateCacheMiddleware’, #第一    
        'django.middleware.common.CommonMiddleware',
        # 重写process_request方法
        ‘django.middleware.cache.FetchFromCacheMiddleware’, #最后
    )
    “update” 必须配置在第一个
    “fetch” 必须配置在最后一个
    CACHE_MIDDLEWARE_SECONDS=10  # 设置超时时间
    
    views:
    def cache_test(request):
        ctime = time.time()
        return render(request, 'index.html', locals())
    index:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {#{% load cache %}#}
     <h3 style="color: green">不缓存:-----{{ ctime }}</h3>
    <hr>
    {#{% cache 2 'ctime' %}#}
     <h3>缓存:-----:{{ ctime }}</h3>
    {#{% endcache %}#}
    
    </body>
    </html>
    全站缓存

    全站缓存需要用到django中间件

    用户的请求通过中间件,经过一系列的认证等操作,如果请求的内容在缓存中存在,则使FetchFromCacheMiddleware获取内容并返回给用户

    当返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将缓存保存至Django的缓存之中,以实现全站缓存

      

    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    破圈法求最小生成树+最小生成树与最短路径问题
    相信你们的锐意前行,终将成就更美好的未来
    “基于模块化自动驾驶底盘的PIX移动空间”发布
    Node:通过 Uglify 压缩小程序代码
    CSS 实用技巧
    websercie调用方式
    IDEA 添加tomcat启动后控制台乱码解决方案
    对象转json串,json转对象
    js 判断一个变量是数组还是对象
    @Transactional 锁表吗?关于Spring注解@Transactional和SQL for update 的一些观点
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10638819.html
Copyright © 2020-2023  润新知