为什么使用缓存?以空间换时间。
https://docs.djangoproject.com/zh-hans/2.0/topics/cache/
(*)缓存框架的核心目标
-- 较少的代码
缓存应该尽可能快
因此围绕缓存后端的所有框架代码应该保持在绝对最小值,特别是对于获取操作
-- 一致性
缓存API应该是提供跨越不同缓存后端的一致接口
-- 可扩展性
基于开发人员的需求,缓存API应该可以在应用程序级别扩展
----------------------------------------------------------------------------------------------------------------------------------
缓存
1.django内置了缓存框架,并提供了几种常用的缓存
(1)基于Memcached缓存,不用了
(2)使用数据库进行缓存(一般用resis,Django里面没有内置redis缓存,所以需要自己安装第三方插件),现在一般是用这个,数据库中的数据关系越复杂,缓存效率越低,一张表中有十万条数据可能比两万条数据级联了三张表效率还要高。
(3)使用文件进行存,文件进行取
(4)使用本地内存进行缓存,速度快,但是容易丢失,而且别人访问不了你电脑里的缓存。
(5)提供缓存扩展接口(也就是第三方插件)
--------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------
2. Django中实现用redis做缓存
使用Redis做缓存 常见的有两个实现
(1)django-redis
http://django-redis-chs.readthedocs.io/zh_CN/latest/#django
(2)django-redis-cache
·https://pypi.python.org/pypi/django-redis-cache/
-----------------------------------------------------------------------------------------------------------------------------------
缓存插件 安装——》配置——》使用
(1)安装
pip install django-redis / django-redis-cache
(2)配置
和内置的缓存配置基本一致(将下面代码直接粘贴到settings文件中)
CACHES={"default": {"BACKEND":"django_redis.cache.RedisCache","LOCATION":"redis://127.0.0.1:6379/1","OPTIONS": {"CLIENT_CLASS":"django_redis.client.DefaultClient", } }}
(3)用法和内置缓存使用一样
创建缓存表
python manage.py createcachetable [table_name]
缓存配置
CACHES={'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
fromdjango.core.cacheimportcachescache=caches['cache_name']
----- 获取cache
fromdjango.core.cacheimportcache
----缓存操作
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