Django入门教程

前言

第一章: django快速入门

第二章: django MTV架构

第三章: django视图

第四章: django模板

第五章: django模型

第六章: django后台管理系统

第七章: 项目实战-简易的博客系统

第八章:django表单

第九章:django用户认证系统

第十章:django中的会话

第十一章:django安全

第十二章:django性能优化

第十三章:django实用工具

首页 > Django入门教程 > 第十二章:django性能优化 > 12.2节:使用Cache API

12.2节:使用Cache API

薯条老师 2020-10-15 08:10:31 234044 0

编辑 收藏

系统讲解Django开发的基础知识, 高级知识。关注公众号[薯条编程],领取该教程的PDF电子书:《Python web开发-Django从入门到项目实战》。

12.2.1 更细粒度的缓存控制

使用django的缓存框架,可以对站点,视图进行缓存,这些都是页面级别的缓存。在某些情况下,对整个页面进行缓存并不是最佳的方法。比如页面的一部分内容需要经常更新,此时如果对整个页面进行缓存,会减弱内容的实时性,影响用户体验。

缓存的使用原则,只需对很少变化的静态数据进行缓存。

只对模板中的部分内容进行缓存,可以解决这样的问题。django同时提供了一套底层的Cache API,可以对缓存进行更细粒度的控制,将应用中的Python数据对象单独缓存。

12.2.2 Cache API的基本用法

在django.core.cache中提供了一个类似字典类型的caches对象,通过caches对象可以访问在settings.py中的配置的缓存实例。根据CACHES中的缓存别名来获取缓存实例:

>>> from django.core.cache import caches

>>> cache = caches['myalias']

>>> default_cache = caches['default']

caches返回的是一个线程安全的缓存实例,如果缓存别名对应的缓存实例不存在,django会抛出一个InvalidCacheBackendError的错误异常。django同时提供了访问默认缓存实例的快捷方式:

from django.core.cache import cache

等价于:

>>> from django.core.cache import caches

>>> cache = caches['default']

cache对象的操作方法:

(1) 设置缓存对象

1.cache.set(key, value,timeout=DEFAULT_TIMEOUT,version=None)

参数

key是一个字符串类型,表示缓存对象的键名。

value是一个可列化的任意python对象,表示缓存对象的值。

timeout表示缓存的有效期,默认为在CACHES中配置的有效期。

version表示缓存对象对应的版本号。

描述:

设置缓存对象的值、过期时间、版本号,无返回值。

代码实例:

>>> cache.set('user', 'Backer')

2.cache.add(key, value,timeout=DEFAULT_TIMEOUT,version=None)

参数:

同cache.set方法

描述:

当缓存对象不存在时才调用该方法。

如果缓存对象已存在,该方法不会去更新缓存对象的值。

add方法的返回值为布尔类型,如果为True表示已经将结果进行缓存,否则表示未缓存。

代码实例:

>>> cache.add('user', 'Lohan')

False

>>> cache.add('uid', 1314)

True

3.cache.touch(key, timeout=DEFAULT_TIMEOUT,version=None)

参数:

同cache.set方法

描述:

为缓存对象设置一个新的过期时间,返回布尔类型,True表示设置成功,False表示设置失败。

代码实例:

>>> cache.touch('user', 60)

True

4.cache.get_or_set(key, value,timeout=DEFAULT_TIMEOUT,version=None)

参数:

同cache.set方法

描述:

如果缓存对象不存在则会创建一个新的缓存对象,如果缓存对象已存在,则会更新该缓存对象的值。该方法返回缓存对象的值。

代码实例:

>>> cache.get_or_set('user', 'Lohan')

'Lohan'

5.cache.set_many(dict,timeout)

参数:

dict:字典类型,键名表示缓存对象的键名。

timeout:缓存对象的有效期,单位为秒

描述:

批量设置缓存对象。

代码实例:

>>> cache.set_many({'a': 1, 'b': 2, 'c': 3})

(2) 读取缓存对象

1.cache.get(key, default=None,version=None)

参数:

同cache.set方法

描述:

获取缓存对象的值。

代码实例:

>>> cache.get('user')

'Lohan'

2.cache.get_many(keys, version=None)

参数:

keys:是一个可迭代对象(列表,元组,字典),对象中的元素表示缓存对象的键名。

version:缓存对象的版本号。

描述:

批量获取缓存对象的值。

代码实例:

>>> values = cache.get_many({'a','b'})

>>> value

{'b': 2, 'a': 1}

(3) 删除缓存对象

1.cache.delete_many(keys, version=None)

参数:

同cache.get_many方法

描述:

批量删除缓存对象。

代码实例:

>>> cache.delete_many({'a','b'})

2.cache.clear()

描述:

清空项目中的所有缓存,需谨慎使用。

代码实例:

>>> cache.clear()

(4) 自增与自减

1.cache.incr(key, delta=1, version=None)

参数:

key:缓存对象的键名

delta:表示增量值

version:缓存对象的版本号

描述:

对缓存对象的值进行自增,返回自增后的值

代码实例:

>>> cache.set('count', 1)

>>> cache.incr('count', 3)

4

2.cache.decr(key, delta=1, version=None)

参数:

同cache.incr方法。

描述:

对缓存对象的值进行自减,返回自减后的值

代码实例:

>>> cache.set('count', 1)

>>> cache.decr('count', 3)

-2

(5) 自缓存对象的版本号

在设置缓存对象时,通过添加一个版本号,可以对缓存对象进行版本控制。

代码实例:

>>> cache.set('username', 'Lohan', version=2)

>>> cache.get('username')

None

在上文代码中,创建了一个键名为my_key的缓存对象,并且设置的版本号为2。由于执行get方法时未指定版本号,所以获取到的值为None。对缓存对象添加版本号,可以对不同阶段的缓存对象进行版本控制,在访问缓存对象时,必须指定正确的版本号:

>>> cache.get('username',version=2)

LOhan

django同时提供了两个便捷的方法来对缓存对象的版本号进行自增与自减:

1.cache.incr_version(key, delta=1, version=None)

2.cache.decr_version(key, delta=1, version=None)

代码实例:

>>> cache.decr_version('username', version=3)

2

>>> cache.incr_version('username', version=2)

3

>>> cache.decr_version('username', version=3)

2

关注微信公众号:薯条编程,公众号后台回复"Python资料",免费领取Python电子书,以及学习Python视频课程。

小班授课,薯条老师一对一教学,火热报名中,点击了解线下就业培训。




欢迎 发表评论: