zoukankan      html  css  js  c++  java
  • django的缓存

    一、django的五种缓存的存储方式

    1、调试模式,不对缓存做任何处理,这里主要是学习设置缓存的字段,这些字段在其他的存储方式中均适用

    # 此为开始调试用,实际内部不做任何操作
        # 配置:
            CACHES = {
                'default': {
                    'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎
                    'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
                    'OPTIONS':{
                        'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300)
                        'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
                    },
                    'KEY_PREFIX': '',                                             # 缓存key的前缀(默认空)
                    'VERSION': 1,                                                 # 缓存key的版本(默认1)
                    'KEY_FUNCTION' 函数名                                          # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
                }
            }
     
     
        # 自定义key
        def default_key_func(key, key_prefix, version):
            """
            Default function to generate keys.
     
            Constructs the key used by all other methods. By default it prepends
            the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
            function with custom key making behavior.
            """
            return '%s:%s:%s' % (key_prefix, version, key)
     
        def get_key_func(key_func):
            """
            Function to decide which key function to use.
     
            Defaults to ``default_key_func``.
            """
            if key_func is not None:
                if callable(key_func):
                    return key_func
                else:
                    return import_string(key_func)
            return default_key_func
    

     

    2、内存

    # 此缓存将内容保存至内存的变量中
        # 配置:
            CACHES = {
                'default': {
                    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                    'LOCATION': 'unique-snowflake',#给缓存放置的内存区设置一个名字
                }
            }
     
        # 注:其他配置同开发调试版本
    

      

    3、文件

    # 此缓存将内容保存至文件
        # 配置:
     
            CACHES = {
                'default': {
                    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
                    'LOCATION': '/var/tmp/django_cache',#配置缓存存放的目录
                }
            }
        # 注:其他配置同开发调试版本
    

      

    4、数据库

    # 此缓存将内容保存至数据库
     
        # 配置:
            CACHES = {
                'default': {
                    'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
                    'LOCATION': 'my_cache_table', # 数据库表
                }
            }
     
        # 注:需要执行创建表命令 python manage.py createcachetable,这样会额外创建一张表来存放缓存数据
    

      

    5、memcache

    # 此缓存使用pylibmc模块连接memcache
         
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
                'LOCATION': '127.0.0.1:11211',
            }
        }
     
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
                'LOCATION': '/tmp/memcached.sock',
            }
        }  
     
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
                'LOCATION': [
                    '172.19.26.240:11211',
                    '172.19.26.242:11211',
                ]
            }
        }
    

      

    二、django的缓存的应用,一共有三种方式

    1、对某个视图函数生效

    from django.views.decorators.cache import cache_page
    
    
    # 1、用法1,为单独的视图函数设置缓存
    @cache_page(10)
    # 这里10是缓存的超时时间
    def test_cache(request):
        import time
        return HttpResponse(time.time())
    

      

    2、对某个html文件的的一部分生效,主要是在html中设置

    def part_cache(request):
        return render(request,"part.html",{"v":time.time()})
    

      

    {% load cache %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    2、缓存的使用方法2,对页面的局部做缓存处理
        <h1>不做缓存处理{{ v }}</h1>
    
        {% cache 10 part_cache %}
        <h2>缓存处理{{ v }}</h2>
        {% endcache %}
    </body>
    
    </html>
    

      

    3、对全网生效,需要在中间件中设置

    # 3、缓存的用法3,全局生效,在中间件中设置
    from django.middleware.security import SecurityMiddleware
    from django.middleware.cache import UpdateCacheMiddleware
    from django.middleware.cache import FetchFromCacheMiddleware
    MIDDLEWARE = [
        "django.middleware.cache.UpdateCacheMiddleware",
    
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
    
        # 定义了2个自定义的中间件
        'middle.md.test',
        'middle.md.middle_first',
        'middle.md.middle_second',
        "django.middleware.cache.FetchFromCacheMiddleware"
    ]
    

      

     生效的权力:全局大于》某个视图函数》某个html局部

     

  • 相关阅读:
    L2 L3 L4
    C 语言assert使用
    VIM 命令收藏
    C++继承实例
    关于 WinScp 的一点使用经验
    Boa服务器移植
    Android 去掉标题全屏显示
    sys下gpio操作
    linux下 XGCOM串口助手的安装
    linux中inittab文件详解
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/9457994.html
Copyright © 2011-2022 走看看