LoachBlog

LoachBlog 个人笔记

django缓存配置

Django 支持的缓存类型

  • 内存(local-memory caching)- 文件(FileSystem caching)- 数据库(Database caching)- Memcache缓存系统(有python-memcached和pylibmc两种方式)- 伪缓存(Dummy caching 用于开发模式)- 自定义缓存(Customer caching)

django 缓存类型的配置

  • 在django的settings.py下配置缓存类型

local-memory caching配置

CACHES={
    'default':{
        'BACKEND':'django.core.cache.backends.locmem.LocMemCache',
        #给放置缓存的内存区设置一个名字
        'LOCATION':'loach-blog',
    }
}

FileSystem caching配置

CACHES={
    'default':{
        #让系统知道我们将缓存存储在文件缓存系统中的区域
        'BACKEND':'django.core.cache.backends.filebased.FileBasedCache',
        #指定缓存存储的文件夹,
        #windows
        'LOCATION':'d:/tmp/django_cache',
        #linux
        #'LOCATION':'/var/tmp/django_cache'
    }
}
注意事项
* 目录的路径必须为绝对路径,确保系统能够对缓存的目录有访问权限。
* 目录的路径结尾处"/"可有可无
* 确保目录存在,且web服务器的用户对该目录具有读写权限
* 注意配置的大小写(Linux)

Database caching配置

  • 配置前需要使用python manage.py createcachetable命令来创建一张表存放缓存数据
    CACHES={
      'default':{
          'BACKEND':'django.core.cache.backends.db.DatabaseCache',
          #数据库中的缓存表名
          'LOCATION':'my_cache_table',
      }
    }
    
  • Memcached caching python-memcached版配置

    CACHES={
        'default':{
            'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
            #数据库中的缓存表名
            'LOCATION':'127.0.0.1:11211',
        }
    }
    

    Memcached caching python-pylibmc版配置

    CACHES={
        'default':{
            'BACKEND':'django.core.cache.backends.memcached.PyLibMCCache',
            #数据库中的缓存表名
            'LOCATION':'127.0.0.1:11211',
        }
    }
    

    Dummy caching 配置

    CACHES={
        'default':{
            'BACKEND':'django.core.cache.backends.dummy.DummyCache',
        }
    }
    

    Customer caching 配置

    CACHES={
        'default':{
            'BACKEND':'path.to.backend',
        }
    }
    

    缓存参数

    • 每个缓存后端提供额外的参数来控制缓存的行为。- CACHES下参数列表 |参数名|描述 |------ |TIMEOUT|用于缓存的默认时间(秒为单位)。默认为300秒(5分钟),None永不过期,0为立即过期(即不缓存)。 |VERSION|缓存键的默认版本号 |KEY_FUNCTION|生成最终缓存 keys 的函数路径 |OPTIONS|根据不同的缓存类型对应不同的参数
    • locmem、filesystem以及database的backend中OPTIONS的参数如下: |参数名|描述 |------ |MAX_ENTRIES|删除旧值之前缓存中允许的最大条数,默认为300. |CULL_FREQUENCY|当缓存数目达到 MAX_ENTRIES 时,就会删除部分缓存,删除率为1/CULL_REQUENCY, 如果 CULL_FREQUENCY = 2 ,当达MAX_ENTRIES 时,就会删除一半数据。默认值:3

    其他配置参数

    |参数名|描述 |------ |CACHE_MIDDLEWARE_ALIAS = 'default'|用来存储的缓存别名 |CACHE_MIDDLEWARE_SECONDS = 0|所有页面默认缓存时间,默认600 |CACHE_MIDDLEWARE_KEY_PREFIX ='www.loachblog.com'|关键的前缀,当多个站点使用同一个配置的时候,这个可以设置可以避免发生冲突,一般设置为网站域名 |CACHE_MIDDLEWARE_ANONYMOUS_ONLY = False|那么只有匿名的请求会被缓存,这是一个禁用缓存非匿名用户页面的最简单的做法,注意确保已经启用了Django用户认证中间件

    django 启动缓存

    • 使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存- 在settings.py 配置中间件
    MIDDLEWARE = [
        #缓存中间件,必须为第一个
        'django.middleware.cache.UpdateCacheMiddleware',
        #其他中间件
        #缓存中间件,必须放在最后一个
        'django.middleware.cache.FetchFromCacheMiddleware',
    ]
    
    • 查看缓存文件
    #配置好缓存类型, 并设置好缓存中间件后,运行django项目
    python manage.py runserver
    # 查看缓存目录,会发现已经生成了站点的缓存文件
    

    FetchFromCacheMiddleware

    • 会缓存 GET 和 HEAD 200 状态的 responses,而且这些 request 和 response 的headers 是允许的;同一个 URL request, 不同查询参数,他的 Responses 会被作为不同 page 分别缓存;这个中间件期待用具有相同 response headers 的 GET request 的response 进行响应,这样它就可以用缓存的 GET response 响应 HEAD request。

    UpdateCacheMiddleware

    • 此中间件会在每个 HttpResponse 中自动设置一些 headers:对于一个页面的新版本(未被缓存过)的请求,设置 Last-Modified header 为当前日期/时间;设置 Expires header 为当前时期/时间 + 定义的CACHE_MIDDLEWARE_SECONDS设置 Cache-Control header 的 max age 指令CACHE_MIDDLEWARE_SECONDS (max age是指缓存的内容将在多少秒后失效)

    其他

    • 如果 view 设置了自己的 cache 过期时间 (如:设置了 Cache-Control 的 max-age), 则页面的缓存过期时间会以 view 的过期时间为准。

    打赏

    取消

    打赏

    扫描支持
    请我喝咖啡

    打开支付宝请我喝咖啡

    请登录后评论.
        

    No comment。