django緩存配置的幾種方法詳解
為什么要用緩存?
首先說,為什么要用緩存的,由于Django是動(dòng)態(tài)網(wǎng)站,所有每次請求均會(huì)去數(shù)據(jù)進(jìn)行相應(yīng)的操作,當(dāng)程序訪問量大時(shí),耗時(shí)必然會(huì)更加明顯,最簡單解決方式是使用:緩存,緩存將一個(gè)某個(gè)views的返回值保存至內(nèi)存或者memcache中,5分鐘內(nèi)再有人來訪問時(shí)(時(shí)間可以設(shè)置),則不再去執(zhí)行view中的操作,而是直接從內(nèi)存或者Redis中之前緩存的內(nèi)容拿到,并返回。
另外,緩存只是一類統(tǒng)稱,一般其介質(zhì)是速度很快的內(nèi)存,但也可以是能加快數(shù)據(jù)讀取的其它方式。
什么時(shí)候適合用緩存?
對頁面實(shí)時(shí)性要求不高的頁面,可以用緩存。比如博客文章,假設(shè)用戶一天更新一篇文章,那么可以為博客設(shè)置1天的緩存;一天后會(huì)刷新。另外像購物網(wǎng)站,商品的描述信息幾乎不會(huì)變化,而商品的庫存數(shù)量卻要求根據(jù)用戶的購買實(shí)時(shí)更新,因此也應(yīng)該應(yīng)用合適的緩存策略。
緩存的配置
配置緩存提供了6種方式。
- 開發(fā)調(diào)試
- 內(nèi)存
- 文件
- 數(shù)據(jù)庫
- Memcache緩存(python-memcached模塊)
- Memcache緩存(pylibmc模塊)
開發(fā)調(diào)試:
說明:此為開始調(diào)試用,實(shí)際內(nèi)部不做任何操作
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎 'TIMEOUT': 300, # 緩存超時(shí)時(shí)間(默認(rèn)300秒,None表示永不過期,0表示立即過期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大緩存?zhèn)€數(shù)(默認(rèn)300) 'CULL_FREQUENCY': 3, # 緩存到達(dá)最大個(gè)數(shù)之后,剔除緩存?zhèn)€數(shù)的比例,即:1/CULL_FREQUENCY(默認(rèn)3),3:表示1/3 }, #這邊只的是緩存的key:p1:1:func_name 'KEY_PREFIX': 'p1', # 緩存key的前綴(默認(rèn)空) 'VERSION': 1, # 緩存key的版本(默認(rèn)1) 'KEY_FUNCTION':"func_name" # 生成key的函數(shù)(默認(rèn)函數(shù)會(huì)生成為:【前綴:版本:key】) } }其他除了引擎不一樣,其他的都是通用的,這邊只的是緩存的key:p1:1:func_name的源碼如下:所以我們就可以自定義這個(gè)key的格式。 # 自定義key def default_key_func(key, key_prefix, version): """ Default function to generate keys. Constructs the key used by all other methods. By default it prepends the `key_prefix'. KEY_FUNCTION can be used to specify an alternate function with custom key making behavior. """ return '%s:%s:%s' % (key_prefix, version, key) def get_key_func(key_func): """ Function to decide which key function to use. Defaults to ``default_key_func``. """ if key_func is not None: if callable(key_func): return key_func else: return import_string(key_func) return default_key_func
內(nèi)存:
注意是絕對位置(從根目錄開始),必須保證服務(wù)器對你列出的路徑具有讀寫權(quán)限
#'LOCATION': 'c:\foo\bar',#windows下的示例
說明:內(nèi)存版本的時(shí)候,必須設(shè)置一個(gè)值,這個(gè)值是唯一的,此緩存將內(nèi)容保存至內(nèi)存的變量中
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', #這邊必須設(shè)置一個(gè)值,這個(gè)值是唯一的 } #其他的配置和開發(fā)調(diào)試版本一樣 }
文件:說明:此緩存將內(nèi)容保存至文件
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', #緩存存放的路徑<br data-filtered="filtered"> } #其他的配置和開發(fā)調(diào)試版本一樣 }
數(shù)據(jù)庫:說明:此緩存將內(nèi)容保存至數(shù)據(jù)庫
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', # 設(shè)置一個(gè)數(shù)據(jù)庫存放緩存的表名 } #其他的配置和開發(fā)調(diào)試版本一樣 } # 注:執(zhí)行創(chuàng)建表命令 python manage.py createcachetable
Memcache緩存(python-memcached模塊)
說明:此緩存使用python-memcached模塊連接memcache
#單臺(tái)機(jī)器 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } #其他的配置和開發(fā)調(diào)試版本一樣 } #存放本地的 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'unix:/tmp/memcached.sock', } #其他的配置和開發(fā)調(diào)試版本一樣 } #支持集群,負(fù)載均衡 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', #設(shè)置權(quán)重 #('172.19.26.240:11211',10), #('172.19.26.242:11211',20), ] } #其他的配置和開發(fā)調(diào)試版本一樣 }
Memcache緩存(pylibmc模塊)
說明:此緩存使用pylibmc模塊連接memcache
# 此緩存使用pylibmc模塊連接memcache CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211', } } CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '/tmp/memcached.sock', } } CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', ] } }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
升級Python版本后anaconda navigator啟動(dòng)失敗解決方案(最新推薦)
anaconda navigator啟動(dòng)失敗,尤其是重裝不解決問題的,大概率是庫沖突,解決方法也很簡單,只需要?jiǎng)h掉引起沖突的庫,感興趣的朋友跟隨小編一起看看吧2023-11-11Python?3.11.0下載安裝并使用help查看模塊信息的方法
本文給大家介紹Python?3.11.0下載安裝并使用help查看模塊信息的相關(guān)知識(shí),首先給大家講解了Python?3.11.0下載及安裝緊接著介紹了在命令行使用help查看模塊信息的方法,感興趣的朋友跟隨小編一起看看吧2022-11-11Python Logging 日志記錄入門學(xué)習(xí)
這篇文章主要介紹了Python Logging 日志記錄入門學(xué)習(xí),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06解決Pytorch dataloader時(shí)報(bào)錯(cuò)每個(gè)tensor維度不一樣的問題
這篇文章主要介紹了解決Pytorch dataloader時(shí)報(bào)錯(cuò)每個(gè)tensor維度不一樣的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python獲取接口數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了Python獲取接口數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07python使用pypdf2實(shí)現(xiàn)pdf文檔解密
利用pypdf2完成pdf的解密,這里的事例是python3環(huán)境下的,當(dāng)然python2下也可以運(yùn)行,只需要修改名稱即可,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12