缓存的意义:
动态网站的基本权衡是动态的。每次用户请求页面时,Web服务器都会进行各种计算,从数据库查询到模板呈现再到业务逻辑,创建站点访问者可以看到的页面。从处理开销的角度来看,这比标准的从文件中读取文件的服务器系统要贵得多。
对于大多数Web应用程序而言,此开销并不大。大多数Web应用程序不是washingtonpost.com或slashdot.org; 它们只是流量一般的中小型网站。但是对于中到高流量的站点,必须尽可能减少开销。这就需要缓存了。缓存某些内容是为了保存昂贵的计算结果,这样可以大大减少服务器开销,减轻服务器压力。
Django带有一个健壮的缓存系统,可以保存动态页面,因此不必为每个请求都计算它们。为了方便起见,Django提供了不同级别的缓存粒度:可以缓存特定视图的输出,可以仅缓存难以生成的片段,或者可以缓存整个站点。
缓存框架的核心目标:
-
最佳的代码:
缓存应该尽可能快
因此围绕缓存最佳的所有框架代码应该保持在绝对预设,特别是对于获取操作 -
一致性
缓存API应该是提供跨越不同缓存先前的一致接口 -
可扩展性
基于开发人员的需求,缓存API应该可以在应用程序级别扩展
缓存
- django内置了缓存框架,并提供了多个常用的缓存:
1.基于Memcached缓存
2.使用数据库进行缓存
3.使用文件系统进行缓存
4.使用本地内存进行缓存
5.提供缓存扩展接口
缓存配置
1.创建缓存表
python manage.py createcachetable [table_name]
2.缓存配置
CACHES = {
'默认':{
' BACKEND ':' django.core.cache.backends.db.DatabaseCache ',
' LOCATION ':' my_cache_table ',
' TIMEOUT ':' 60 ',
' OPTIONS ':{
' MAX_ENTRIES ':' 300 ',
},
' KEY_PREFIX ': '摇滚',
' VERSION ': ' 1 ',
}
}
缓存使用
- 在视图中使用(使用最多的场景)
- @cache_page()
1.时间秒60 * 5缓存五分钟
2.cache缓存配置,默认为default
3.key_prefix初步基线
获取缓存
从 django.core.cache 导入缓存
缓存=缓存[ ' cache_name ' ]
缓存操作
缓存集:
- 键
- 值
- 超时
设置缓存:
- get_many
- set_many
删除缓存:
- delete_many
增加: - incr(key,value)key对应的值上添加值
减少: - decr(key,value)key对应的值上减少value,如果value不写,默认变更为1
使用Redis做缓存
常见的有两个实现
- django-redis
http://django-redis-chs.readthedocs.io/zh_CN/latest/#django
- django-redis-cache
·https://pypi.python.org/pypi/django-redis-cache/
- 配置和内置的缓存配置基本一致
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
- 用法和内置缓存使用一样