缓存
存储中间数据的一种介质
作用:提升服务器响应速度
将执行过的操作数据存储下来,在一定时间内,再次获取数据的时候,直接从缓存中获取
比较理想的方案,缓存使用内存级缓存
使用缓存的目的:
缓解服务器的读写压力
提升服务器的响应速度
提升用户体验
Django内存缓存框架
缓存框架的核心目标:
较少的代码:
缓存应该尽可能快
因此围绕缓存后端的所有框架应该保持在绝对最小值,特别是对于获取操作
一致性:
缓存API应该是提供跨越不同缓存后端的一致接口
可扩展性:
基于开发人员的需求,缓存API应该可以在应用程序级别扩展
django内置了缓存框架,并提供了几种常用的缓存
基于Memcached缓存(类似redis的内存级数据库)
使用数据库进行缓存
使用文件系统进行缓存
使用本地内存进行缓存 # 本机的本地内存其他电脑无法访问
提供缓存扩展接口
缓存配置:
-
创建缓存表,缓存表支持过期
python manage.py createcachetable my_cache_table
-
缓存配置,在settings.py中:
CACHES = {
'default': { # 缓存实现
'BACKEND': 'django.core.cache.backends.db.DatabaseCache', # 缓存实现后端
'LOCATION': 'my_cache_table', # 缓存位置
'TIMEOUT': 60*5 # 缓存超时时间
# 'OPTIONS': {
# 'MAX_ENTRIES': '300',
# },
# 'KEY_PREFIX': 'wcw', # key统一前缀
# 'VERSION': '1' # 版本信息
}
}
-
缓存使用:
在视图中使用装饰器(使用最多的场景)@cache_page(timeout,cache,key_prefix) time 秒 60*5 缓存5分钟 cache 缓存配置 默认default key_prefix 前置字符串
请求流程:
无缓存请求流程:
client——url——views——models——db——models——views——response——client
有缓存请求流程:
-有缓存内容 则返回到views——response——client
client——url——views——cache/ -无缓存内容 则返回到views——models——db——models——views——储存缓存,然后返回到response——client
缓存底层:
获取cache(存在多个缓存时,通过cache_name获取缓存)
from django.core.cache import caches
cache = caches['cache_name']
获取cache(只有一个缓存时,直接获取)
from django.core.cache import cache"
缓存操作:
cache.set # 往缓存里设置值
key
value
timeout
get # 获取值
add # 添加值
get_or_set
get_many
set_many
delete
delete_many
clear
ncr增加
incr(key,value) key对应的值上添加value
decr增加
decr(key,value) key对应的值上减少value
如果value不写,默认变更为1
使用redis作为缓存:
常见的有两个实现:首先用pip安装下面两个包
pip install django-redis
pip install django-redis-cache
在settings中的CACHE配置redis相关配置
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', }
}
需要安装并启动redis才可以使用
redis-server
多缓存:
在使用多缓存时,需要同时配置多个缓存配置
使用多缓存时 需要在views中设置好对应的缓存存储位置
1:装饰器:
@cache_page(timeout, cache='CACHE_name')
2.使用 caches获取
from django.core.cache import caches
cache = caches['cache_name']