為什么使用緩存?以空間換時(shí)間。
https://docs.djangoproject.com/zh-hans/2.0/topics/cache/
? ? -- 較少的代碼
? ? ????????緩存應(yīng)該盡可能快
????????????因此圍繞緩存后端的所有框架代碼應(yīng)該保持在絕對(duì)最小值,特別是對(duì)于獲取操作
? ? -- 一致性
????????????緩存API應(yīng)該是提供跨越不同緩存后端的一致接口
? ? -- 可擴(kuò)展性
????????????基于開發(fā)人員的需求,緩存API應(yīng)該可以在應(yīng)用程序級(jí)別擴(kuò)展
----------------------------------------------------------------------------------------------------------------------------------
1.django內(nèi)置了緩存框架,并提供了幾種常用的緩存
(1)基于Memcached緩存,不用了
(2)使用數(shù)據(jù)庫(kù)進(jìn)行緩存(一般用resis,Django里面沒有內(nèi)置redis緩存,所以需要自己安裝第三方插件),現(xiàn)在一般是用這個(gè),數(shù)據(jù)庫(kù)中的數(shù)據(jù)關(guān)系越復(fù)雜,緩存效率越低,一張表中有十萬條數(shù)據(jù)可能比兩萬條數(shù)據(jù)級(jí)聯(lián)了三張表效率還要高。
(3)使用文件進(jìn)行存,文件進(jìn)行取
(4)使用本地內(nèi)存進(jìn)行緩存,速度快,但是容易丟失,而且別人訪問不了你電腦里的緩存。
(5)提供緩存擴(kuò)展接口(也就是第三方插件)
--------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------
2. Django中實(shí)現(xiàn)用redis做緩存
????使用Redis做緩存?常見的有兩個(gè)實(shí)現(xiàn)
(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)配置
????和內(nèi)置的緩存配置基本一致(將下面代碼直接粘貼到settings文件中)
CACHES={"default": {"BACKEND":"django_redis.cache.RedisCache","LOCATION":"redis://127.0.0.1:6379/1","OPTIONS": {"CLIENT_CLASS":"django_redis.client.DefaultClient",? ? ? ? }? ? }}
(3)用法和內(nèi)置緩存使用一樣
創(chuàng)建緩存表
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',? ? }}
在視圖中使用(使用最多的場(chǎng)景)
@cache_page()
time 秒 60*5 緩存五分鐘
cache 緩存配置, 默認(rèn)default,
key_prefix 前置字符串
----- 獲取cache
fromdjango.core.cacheimportcachescache=caches['cache_name']
----- 獲取cache
fromdjango.core.cacheimportcache
----緩存操作
????cache.set
? ? ?參數(shù)有:key
? ? ? ? ? ? ????? value
? ? ? ? ? ? ????? timeout(緩存時(shí)長(zhǎng)) 過了緩存時(shí)長(zhǎng)給你刷新數(shù)據(jù),否則一直走緩存
????get
????add
get_or _set
????get_many
????set_many
????delete
????delete_many
????clear
????incr 增加
????????????incr(key, value) key對(duì)應(yīng)的值上添加 value
????decr 減少
????????????decr(key, value) key對(duì)應(yīng)的值上減少value
????????????如果value不寫,默認(rèn)變更為1