Django中的Low-level 缓存详解

来源:互联网 发布:linux 物理内存大小 编辑:程序博客网 时间:2024/04/28 15:48

Django 提供了简单低级的缓存 API,可以以任意粒度缓存数据。

  可以缓存所有能够安全进行 pickle处理的 Python 对象: strings, dictionaries, lists of model objects等等

Low-level 缓存- 访问缓存

  通过Low-levelAPI来访问缓存

  通过 django.core.cache.caches可以访问配置中的 CACHES //使用API来访问caches字典的方法

>>> from django.core.cache import caches //选择我们需要的缓存

>>> cache1 = caches['myalias'] //直接调用缓存别名的key

>>> cache2 = caches['myalias']

>>> cache1 is cache2

True

1.如果 cache不存在,报 InvalidCacheBackendError错误;

2.通过 django.core.cache.cache可以访问默认缓存,相当于 caches[‘default’]

Low-level 缓存- 基本用法

set(key, value, timeout) //设置k-v键值对,有三个参数,分别是key, value, timeout(过期时间)

get(key) //传入指定的key,可以得到相应的缓存值,setget是两个最基本的接口

add(key, value, timeout) //添加k-v键值对,如果key已经存在,就会添加失败,返回false

get_many(key_list) //获得多个key的缓存值,参数是key_list

set_many(key_value_dict, timeout) //根据传入的k-v键值对字典,设置多个缓存值,像set方法一样,它也可以设置过期时间

delete(key) //删除指定key的缓存

delete_many(key_list) //删除多个key的缓存值

clear() //清空所有缓存

incr(key, value)

decr(key, value) //incrdecr可以增加或减少指定key的值,针对整型数字,默认情况下回加1或者减1,如果想增加或减少指定的值就可以设置第二个参数

close() -- 如果缓存 backend 实现了这个方法,调用这个函数关闭缓存连接

Low-level 缓存- 缓存key 前缀

  如果缓存是共享的,有可能不同的服务器/产品/开发环境使用了相同的key,这样会导致问题。

Django 支持给所有的 keys 都加上前缀: KEY_PREFIX

  通过设置不同的 KEY_PREFIX,就可以防止冲突发生。

Low-level 缓存- 缓存版本

  配置 VERSION 后(默认为1),Django会将缓存前缀和传入的 key值与版本号连接在一起,也可以指定版本号。

# Set version 2 of a cache key //my_keyversion设置成2,把它存在数据库中的时候,key中就有包含version2的关键字

>>> cache.set('my_key', 'hello world!', version=2)

# Get the default version (assuming version=1)

>>> cache.get('my_key') // 假如默认我们缓存的版本号为1cache.get('my_key')的时候就会得到None

None

# Get version 2 of the same key //如果你想得到刚刚我们的缓存值的话,需要cache.get('my_key', version=2)指定version2,这样就能得到结果了

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

'hello world!'

  如果在项目中使用了缓存,当代码更改后,可能需要清理旧缓存,以满足新代码的格式需求,最简单的方法就是flush整个缓存,但这样会导致问题,失去还可以使用的缓存数据,针对这一点,djanjo提供了更好的方法:

incr_version() decr_version(), 增加或减小指定key version

# Increment the version of 'my_key'

>>> cache.incr_version('my_key') //如果版本默认为1,当调用这个方法后,key在缓存里面version版本就会为2,所以当调用get('my_key')的时候,就必须要指定它的版本了,不然就会得到None

# The default version still isn't available

>>> cache.get('my_key')

None

# Version 2 isn't available, either

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

None

# But version 3 *is* available

>>> cache.get('my_key', version=3)

'hello world!’

Low-level 缓存- 缓存key 转换

  默认的 make_key方法会自动将前缀、versionkey值通过 “:”连接。

  也可以通过配置 KEY_FUNCTION,使用自定义key 生成方法

Low-level 缓存- 缓存key 警告

Memcached,最常用的缓存后端,不允许缓存key 超过250个字符,不允许包含空白和控制字符,如果使用,会抛出异常。

为了提高代码健壮性,如果使用的 keymemcached中会引起错误,其它内建缓存后端将会发出 django.core.cache.backends.base.CacheKeyWarning警告。


原文链接:http://www.maiziedu.com/wiki/django/lowlevel/

 

0 0
原创粉丝点击