Django-缓存机制详解的代码

本文详细介绍了Django的缓存机制,包括数据库缓存、文件系统缓存、设置缓存参数、站点级缓存、视图级缓存、低层次缓存API的使用,以及如何利用Vary头标处理基于请求头标的内容差异。
摘要由CSDN通过智能技术生成

把开发过程中较好的一些内容片段做个珍藏,如下的资料是关于Django-缓存机制详解的内容,应该是对大伙有些用处。

3.数据库缓存(1)使用如下语句创建一个缓存用数据表

python manage.py createcachetable [cache_table_name]

4.文件系统缓存

6.简易缓存(用于开发阶段)

7.伪缓存(供开发时使用)

8.CACHE_BACKEND参数每个缓存后端都可能使用参数,它们在CACHE_BACKEND设置中以查询字符串形式给出,合法的参数为:timeout:用于缓存的过期时间,以秒为单位。这个参数默认被设置为300秒(五分钟)max_entries:对于simple,local-memory与database类型的缓存,这个参数是指定缓存中存放的最大条目数,大于这个数时,旧的条目将会被删除。这个参数默认是300.cull_frequency:当达到max_entries的时候,被接受的访问的比率。实际的比率是1/cull_frequency,所以设置cull_frequency=2就是在达到max_entries的时候去除一半数量的缓存。把cull_frequency的值设置为0意味着当达到max_entries时,缓存将被清空。这将以很多缓存丢失为代价,大大提高接受访问的速度。这个值默认是3在这个例子中,timeout被设成60

而在这个例子中,timeout设为30而max_entries为400:

9.站点级Cache一旦你指定了”CACHE_BACKEND”,使用缓存的最简单的方法就是缓存你的整个网站。这意味着所有不包含GET或POST参数的页面在第一次被请求之后将被缓存指定好的一段时间。

MIDDLEWARE_CLASSES = (
‘django.middleware.cache.CacheMiddleware’,
‘django.middleware.common.CommonMiddleware’,
)

然后,在你的Djangosettings文件里加入下面所需的设置:CACHE_MIDDLEWARE_SECONDS:每个页面应该被缓存的秒数CACHE_MIDDLEWARE_KEY_PREFIX:如果缓存被多个使用相同Django安装的网站所共享,那么把这个值设成当前网站名,或其他能代表这个Django实例的唯一字符串,以避免key发生冲突。如果你不在意的话可以设成空字符串。10.视图级缓存更加颗粒级的缓存框架使用方法是对单个视图的输出进行缓存。这和整站级缓存有一样的效果(包括忽略对有GET和POST参数的请求的缓存)。它应用于你所指定的视图,而不是整个站点。

from django.views.decorators.cache import cache_page

def my_view(request, param):
# …

11.在URLconf中指定视图缓存

from django.views.decorators.cache import cache_page

urlpatterns = (’’,
)

12.低层次缓存API下面是如何导入这个API:

from django.core.cache import cache

基本的接口是set(key,value,timeout_seconds)和get(key):

cache.set(’my_key’, ‘hello, world!’, 30)
cache.get(’my_key’)
‘hello, world!’

timeout_seconds参数是可选的,并且默认为前面讲过的CACHE_BACKEND设置中的timeout参数.如果对象在缓存中不存在,或者缓存后端是不可达的,cache.get()返回None:

Wait 30 seconds for ‘my_key’ to expire…

cache.get(’my_key’)
None

cache.get(’some_unset_key’)
None

我们不建议在缓存中保存None常量,因为你将无法区分所保存的None变量及由返回值None所标识的缓存未中。cache.get()接受一个缺省参数。其指定了当缓存中不存在该对象时所返回的值:

cache.get(’my_key’, ‘has expired’)
‘has expired’

要想一次获取多个缓存值,可以使用cache.get_many()。如果可能的话,对于给定的缓存后端,get_many()将只访问缓存一次,而不是对每个缓存键值都进行一次访问。get_many()所返回的字典包括了你所请求的存在于缓存中且未超时的所有键值。

cache.set(’a’, 1)
cache.set(’b’, 2)
cache.set(’c’, 3)
cache.get_many([‘a’, ‘b’, ‘c’])
{’a’: 1, ‘b’: 2, ‘c’: 3}

如果某个缓存关键字不存在或者已超时,它将不会被包含在字典中。下面是范例的延续:

cache.get_many([‘a’, ‘b’, ‘c’, ‘d’])
{’a’: 1, ‘b’: 2, ‘c’: 3}

最后,你可以用cache.delete()显式地删除关键字。这是在缓存中清除特定对象的简单途径。

cache.delete(’a’)

cache.delete()没有返回值,不管给定的缓存关键字对应的值存在与否,它都将以同样方式工作。

13.使用Vary头标缺省情况下,Django的缓存系统使用所请求的路径(比如:“/stories/2005/jun/23/bank_robbed/”)来创建其缓存键。这意味着对该URL的每个请求都将使用同一个已缓存版本,而不考虑cookies或语言偏好之类的user-agent差别。然而,如果该页面基于请求头标的区别(例如cookies、语言或者user-agent)产生不同内容,你就不得不使用Vary头标来通知缓存机制:该页面的输出取决与这些东西。

from django.views.decorators.vary import vary_on_headers
@vary_on_headers(‘User-Agent’, ‘Cookie’)
def my_view(request):

传入vary_on_headers头标是大小写不敏感的;“User-Agent”与“user-agent”完全相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值