template 片段缓存
定义一个测试用的视图函数
from django.shortcuts import render,render_to_response
from datetime import datetime
# Create your views here.
def index(request):
sec = datetime.now().second
return render(request,'index.html', locals())
使用模板标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load cache %}
{% cache 5 cacheName %}
<h1>{{ sec }}</h1>
{% endcache %}
<h1>{{ sec }}</h1>
<h1></h1>
</body>
</html>
5为 缓存时间,cacheName 缓存片段名字,不能使用变量
默认缓存到default缓存后端,也可以指定
{% cache 300 local-thing ... using = 'cache_alias' %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load cache %}
{% with p1='p1' %}
{% with p2='p2' %}
{% cache 300 cacheName p1 p2 %}
<h1>{{ sec }}</h1>
{% endcache %}
{% endwith %}
{% endwith %}
<h1>{{ sec }}</h1>
<h1></h1>
</body>
</html>
p1 p2 是附加参数 用于生成缓存key 可以不写
>>> from django.core.cache.utils import make_template_fragment_key
>>> k=make_template_fragment_key('cacheName', vary_on=['p1','p2'])
>>> from django.core.cache import cache
>>> cache.get(k)
'\n<h1>35</h1>\n'
Low-level 缓存 基本用法
set(key,value,timeout)
get(key)
add(key, value, timeout)
get_many(key_list)
set_many(key_value_dict,timeout)
delete(key)
delete_many(key_list)
clear()
incr(key,value)
decr(key,value)
close() ????
incr_version(key[,version=2])
decr_version(key)
注意
使用Memcached缓存后端, 不允许缓存key超过250个字符,不允许包括空白和控制字符,如果使用会抛出异常
为了提高代码的健壮性,如果key在memcached中引起错误,其他内建缓存后端会发出
django.core.cache.backends.base.CachKeyWarning警告 ??????????