Django中的Low-level 缓存详解
来源:互联网 发布:linux 物理内存大小 编辑:程序博客网 时间:2024/04/28 15:48
Django 提供了简单低级的缓存 API,可以以任意粒度缓存数据。
可以缓存所有能够安全进行 pickle处理的 Python 对象: strings, dictionaries, lists of model objects等等
Low-level 缓存- 访问缓存
通过Low-level的API来访问缓存
通过 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,可以得到相应的缓存值,set和get是两个最基本的接口
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) //incr和decr可以增加或减少指定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_key的version设置成2,把它存在数据库中的时候,key中就有包含version2的关键字
>>> cache.set('my_key', 'hello world!', version=2)
# Get the default version (assuming version=1)
>>> cache.get('my_key') // 假如默认我们缓存的版本号为1,cache.get('my_key')的时候就会得到None
None
# Get version 2 of the same key //如果你想得到刚刚我们的缓存值的话,需要cache.get('my_key', version=2)指定version为2,这样就能得到结果了
>>> 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方法会自动将前缀、version和 key值通过 “:”连接。
也可以通过配置 KEY_FUNCTION,使用自定义key 生成方法
Low-level 缓存- 缓存key 警告
Memcached,最常用的缓存后端,不允许缓存key 超过250个字符,不允许包含空白和控制字符,如果使用,会抛出异常。
为了提高代码健壮性,如果使用的 key在 memcached中会引起错误,其它内建缓存后端将会发出 django.core.cache.backends.base.CacheKeyWarning警告。
原文链接:http://www.maiziedu.com/wiki/django/lowlevel/
- Django中的Low-level 缓存详解
- django缓存优化 缓存配置与使用 - template low-level api 缓存
- kafka low-level consumer详解
- Low Level MIDI API
- Low-level text rendering
- RPi Low-level peripherals
- python low level thread
- Low-level GPU programming
- Low Level Digital Audio API
- Linux kernel Low Level debug
- LLVM(Low Level Virtual Machine)
- Linux kernel Low Level debug
- Linux kernel Low Level debug
- Low-level Native Plugin Interface
- Linux kernel Low Level debug
- Kafka low level API8 Consumer
- zabbix配置low level discovery
- low-level AI自学路径
- textFiled的颜色设置
- gmic全球移动互联网大会 gmic2017大咖嘉宾名单大曝光!!!
- babel的使用
- 在mac上面安装appium---npm install时报错:npm WARN enoent ENOENT: no such file or directory,
- 兔子- Exception raised during rendering: com/android/util/PropertiesMap (Details)
- Django中的Low-level 缓存详解
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
- 最简洁的PHP程序员学习路线及建议
- 【Unity资源】(脚本/实用工具)
- 负载均衡
- 变步长辛普森求数值积分
- Django 模板复用include
- linux的一些常用命令
- oracle RECORD 示例