django的缓存

django的缓存

1、Django缓存作用

1. 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显
2. 缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作
3. 而是直接从内存或者Redis中之前缓存的内容拿到,并返回

2、Django中提供了6种缓存方式

2.1:开发调试缓存
# 开发调试缓存(虽然配置上,但实际没有缓存,还是到数据库取)

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 引擎

        #注: 下面这些参数时公用的,五种缓存都可以使用
        'TIMEOUT': 300,           # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
        'OPTIONS':{
            'MAX_ENTRIES': 300,   # 最大缓存个数(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例(3就是1/3)
        },
    }
}
2.2:内存缓存
# 注:内存缓存本质上就是在内存中维护一个字典,所存储的形式就是字典的键值对组合

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',     #这个参数指定变量名必须唯一
    }
}
2.3:文件缓存
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR,'cache'),  #缓存内容存放的文件夹路径
    }
}
2.4:数据库缓存
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table', # 数据库表名(名字是自己取的)
    }
}
2.5:Memcache缓存 两种
# 注:Memcache缓存有两个模块:python-memcached模块、 pylibmc模块


CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',          #使用ip加端口连接memcached
    }
}

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'unix:/tmp/memcached.sock',     #以文件的形式连本地memcached
    }
}

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [               # memcached天生支持集群
            #1 均衡分配
            '172.19.26.240:11211',
            '172.19.26.242:11211',
            #2 调整权重(权重和请求比例成正比)
            ('172.19.26.240:11211',1),
            ('172.19.26.242:11211',10),
        ]
    }
}


# 注: pylibmc模块只改变上面'BACKEND'配置为下面样式即可
# 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',

3、Django中缓存3种应用

3.1. 页面级别缓存(需要在views.py文件中引入cache_page)
# 1、views.py文件中的处理函数

from django.views.decorators.cache import cache_page
@cache_page(6)                 #6秒后缓存失效
def cache(request):
    import time
    ctime = time.time()
    return render(request,'cache.html',{'ctime':ctime})
    
# 2、cache.html文件中内容都会被缓存,5s后才会失效

<body>
    <h1>{{ ctime }}</h1>      #页面刷新时时间不会时刻变化,5s过后才会变一次
</body>
3.2. 模板级别缓存(直接在cache.html模板文件中指定某个值放入缓存)
{#1 在文件最顶部引入TemplateTag#}
{% load cache %}

<body>
    {#2 使用缓存   c1是缓存的key值 #}
    {% cache 5 c1 %}        {# 将数据缓存5秒 #}
        {{ ctime }}
    {% endcache %}
</body>
3. 3. 全局缓存(只需要在settings.py中间件配置的首尾各加一条)
注:设置全局缓存后所有页面的模板数据都会应用
MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',
        # 其他中间件...
        'django.middleware.cache.FetchFromCacheMiddleware',
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值