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" 
] 

  

django的缓存详解编程语言

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

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20812.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论