缓存框架的核心目标
较少的代码
- 缓存应该尽可能快
- 因此围绕缓存后端的所有框架代码应该保持在绝对最小值,特别是对于获取操作
一致性
- 缓存API应该是提供跨越不同缓存后端的一致接口
可扩展性
缓存
- django内置了缓存框架,并提供了几种常用的缓存
- 基于Memcached缓存
- 使用数据库进行缓存
- 使用文件系统进行缓存
- 使用本地内存进行缓存
- 提供缓存扩展接口
缓存配置
创建缓存表
1
python manage.py createcachetable [table_name]
缓存配置
1
2
3
4
5
6
7
8
9
10
11
12CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
'TIMEOUT': '60',
'OPTIONS': {
'MAX_ENTRIES': '300',
},
'KEY_PREFIX': 'rock',
'VERSION': '1',
}
}
缓存使用
- 在视图中使用(使用最多的场景)
- @cache_page()
- time 秒 60*5 缓存五分钟
- cache 缓存配置, 默认default,
- key_prefix 前置字符串
缓存底层
获取cache
1
2from django.core.cache import caches
cache = caches['cache_name']
设置cache
1
2from django.core.cache import cache
cache.set('cache_name', 'cache_value', timeout=60)
缓存操作
- cache.set
- key
- value
- timeout
- get
- add
- get_or _set
- get_many
- set_many
- delete
- delete_many
- clear
- incr 增加
- incr(key, value) key对应的值上添加 value
- decr 减少
- decr(key, value) key对应的值上减少value
- 如果value不写,默认变更为1
- cache.set
使用Redis做缓存
常见的有两个实现
- django-redis
- django-redis-cache
配置和内置的缓存配置基本一致
1
2
3
4
5
6
7
8
9CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
用法和内置缓存使用一样