Django中的快取框架 --- 提高web的訪問效率
阿新 • • 發佈:2018-11-06
1、官網檢視資料
https://docs.djangoproject.com/en/2.1/topics/cache/
2、django快取框架的特點
1、儘可能少的程式碼
2、儘可能的快
3、一致性:不同的資料儲存方式,提供一致的藉口(api)來訪問
4、擴充套件性:可以介入外部的儲存方式
3、可以使用的快取方式
1、可以使用Memcached作為快取 -- 內容,分散式,老(新的reids(預設不支援)) 2、可以使用資料庫進行快取 -- 資料量大,效率低 3、可以使用檔案快取 -- 使用不方便,效率低 4、使用本地記憶體進行快取 5、可以接入其他儲存方式 -- redis 記憶體,效率高
4、資料庫快取的使用
1、在setting中配置快取資料庫
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
LOCATION用來指定快取資料庫表的名字
2、執行命令
python manager.py createcachetable
會自動的資料庫建立快取表
3、使用:
直接在需要快取的檢視函式上加上裝飾器即可: 如:@cache_page(60) django會自動快取該檢視函式對應的html,()中的引數表示快取多長時間之後過期,單位秒 如果沒有快取會完整的載入資料,如果有快取資料,直接就載入快取資料 多個url指向同一檢視函式: 每個檢視快取(如每個站點快取)都是從URL鍵入的。如果多個URL指向同一檢視,則每個URL將單獨快取。
5、自定義快取
def testCache(request): # 判斷快取中是否有資料 # 從快取中取資料,獲取到快取內容 cacheTest = cache.get('testCahce') if cacheTest: # 有資料--直接響應 return HttpResponse(cacheTest) else: # 沒有資料,載入並存儲到快取中 time.sleep(3) # 假裝到資料庫取資料 tem = loader.get_template('testCache.html') strHtml = tem.render() # 儲存到快取中去 cache.set('testCahce',strHtml,60) return HttpResponse(strHtml)
6、cache 快取操作
1.包 : from django.core.cache import cache
2.操作:
存: cache.set(key,value,快取時間)
取: cache.get(key)
add 新增
get_or_set 如果有對應的值表示獲取,沒有就設定
get_many 獲取多個
set_many 設定多個值
delete 刪除
delete_many 刪除多個
clear 清除
touch 設定有效時間
7、使用redis資料庫作為快取資料庫 – 快
1、資料
http://django-redis-chs.readthedocs.io/zh_CN/latest/#django
2、使用:
1、安裝對應的模組
pip install django-redis
2、在setting中配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
3、使用redis快取
與上面資料庫快取一樣的用法
直接在需要的檢視函式上加上裝飾器即可:
如: @cache_page(60)
django會自動快取該檢視函式對應的html, ()中的引數表示快取多長時間之後過期,單位秒
如果沒有快取會完整的載入資料,如果有快取資料,直接就載入快取資料
4、注意
使用redis儲存,需要啟動redis服務,否則會報資料鏈接錯誤
啟動redis:
在安裝目錄下的src目錄下
輸入命令:sudo ./redis-server
5、在redis中查詢快取資料
啟動redis的客戶端
在安裝目錄下的src目錄下
輸入命令:sudo ./redis-cli
select 1 切換庫
keys * 檢視所有
get key 獲取某個值
8、快取資料庫的配置
常用配置:
TIMEOUT:用於快取的預設超時(以秒為單位)。此引數預設為300秒(5分鐘)。您可以設定TIMEOUT為None預設情況下快取鍵永不過期。值0使得鍵立即過期(實際上“不快取”)。
OPTIONS中--- MAX_ENTRIES:刪除舊值之前快取中允許的最大條目數。此引數預設為300。