django緩存配置的幾種方法詳解
為什么要用緩存?
首先說(shuō),為什么要用緩存的,由于Django是動(dòng)態(tài)網(wǎng)站,所有每次請(qǐng)求均會(huì)去數(shù)據(jù)進(jìn)行相應(yīng)的操作,當(dāng)程序訪問(wèn)量大時(shí),耗時(shí)必然會(huì)更加明顯,最簡(jiǎn)單解決方式是使用:緩存,緩存將一個(gè)某個(gè)views的返回值保存至內(nèi)存或者memcache中,5分鐘內(nèi)再有人來(lái)訪問(wèn)時(shí)(時(shí)間可以設(shè)置),則不再去執(zhí)行view中的操作,而是直接從內(nèi)存或者Redis中之前緩存的內(nèi)容拿到,并返回。
另外,緩存只是一類(lèi)統(tǒng)稱(chēng),一般其介質(zhì)是速度很快的內(nèi)存,但也可以是能加快數(shù)據(jù)讀取的其它方式。
什么時(shí)候適合用緩存?
對(duì)頁(yè)面實(shí)時(shí)性要求不高的頁(yè)面,可以用緩存。比如博客文章,假設(shè)用戶(hù)一天更新一篇文章,那么可以為博客設(shè)置1天的緩存;一天后會(huì)刷新。另外像購(gòu)物網(wǎng)站,商品的描述信息幾乎不會(huì)變化,而商品的庫(kù)存數(shù)量卻要求根據(jù)用戶(hù)的購(gòu)買(mǎi)實(shí)時(shí)更新,因此也應(yīng)該應(yīng)用合適的緩存策略。
緩存的配置
配置緩存提供了6種方式。
- 開(kāi)發(fā)調(diào)試
- 內(nèi)存
- 文件
- 數(shù)據(jù)庫(kù)
- Memcache緩存(python-memcached模塊)
- Memcache緩存(pylibmc模塊)
開(kāi)發(fā)調(diào)試:
說(shuō)明:此為開(kāi)始調(diào)試用,實(shí)際內(nèi)部不做任何操作
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎
'TIMEOUT': 300, # 緩存超時(shí)時(shí)間(默認(rèn)300秒,None表示永不過(guò)期,0表示立即過(guò)期)
'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)存:
注意是絕對(duì)位置(從根目錄開(kāi)始),必須保證服務(wù)器對(duì)你列出的路徑具有讀寫(xiě)權(quán)限
#'LOCATION': 'c:\foo\bar',#windows下的示例
說(shuō)明:內(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è)值是唯一的
}
#其他的配置和開(kāi)發(fā)調(diào)試版本一樣
}
文件:說(shuō)明:此緩存將內(nèi)容保存至文件
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache', #緩存存放的路徑<br data-filtered="filtered">
}
#其他的配置和開(kāi)發(fā)調(diào)試版本一樣
}
數(shù)據(jù)庫(kù):說(shuō)明:此緩存將內(nèi)容保存至數(shù)據(jù)庫(kù)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', # 設(shè)置一個(gè)數(shù)據(jù)庫(kù)存放緩存的表名
}
#其他的配置和開(kāi)發(fā)調(diào)試版本一樣
}
# 注:執(zhí)行創(chuàng)建表命令 python manage.py createcachetable
Memcache緩存(python-memcached模塊)
說(shuō)明:此緩存使用python-memcached模塊連接memcache
#單臺(tái)機(jī)器
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
#其他的配置和開(kāi)發(fā)調(diào)試版本一樣
}
#存放本地的
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
#其他的配置和開(kāi)發(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),
]
}
#其他的配置和開(kāi)發(fā)調(diào)試版本一樣
}
Memcache緩存(pylibmc模塊)
說(shuō)明:此緩存使用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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
python中Tkinter復(fù)選框Checkbutton是否被選中判斷
這篇文章主要介紹了python中Tkinter復(fù)選框Checkbutton是否被選中判斷方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
python OpenCV學(xué)習(xí)筆記之繪制直方圖的方法
本篇文章主要介紹了python OpenCV學(xué)習(xí)筆記之繪制直方圖的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Python實(shí)現(xiàn)問(wèn)題回答小游戲
這篇文章主要介紹了利用Python制作一個(gè)簡(jiǎn)單的知識(shí)競(jìng)賽小游戲,可以實(shí)現(xiàn)回答問(wèn)題功能,文中的示例代碼介紹詳細(xì),感興趣的同學(xué)快跟隨小編一起學(xué)習(xí)吧2021-12-12
python自動(dòng)化測(cè)試之DDT數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn)代碼
這篇文章主要介紹了python自動(dòng)化測(cè)試之DDT數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
python如何控制進(jìn)程或者線程的個(gè)數(shù)
這篇文章主要介紹了python如何控制進(jìn)程或者線程的個(gè)數(shù),幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-10-10
Python解決多進(jìn)程間訪問(wèn)效率低的方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了當(dāng)Python多進(jìn)程間訪問(wèn)效率低時(shí),應(yīng)該如何解決?文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-09-09
Python?gRPC流式通信協(xié)議詳細(xì)講解
這篇文章主要介紹了Python?gRPC流式通信協(xié)議,最近幾天在搞golang的grpc,跑通之后想用php作為客戶(hù)端調(diào)用一下grpc服務(wù),結(jié)果拉了,一個(gè)php的grpc服務(wù)安裝,搞了好幾天,總算搞定了2022-11-11
使用Python設(shè)置PDF中圖片的透明度的實(shí)現(xiàn)方法
在PDF文檔的設(shè)計(jì)與內(nèi)容創(chuàng)作過(guò)程中,圖像的透明度設(shè)置是一個(gè)重要的操作,尤其是在處理圖文密集型PDF文檔時(shí),本文將介紹如何使用Python添加指定透明度的圖片到PDF文檔或調(diào)整PDF文檔中現(xiàn)有圖片的透明度,需要的朋友可以參考下2024-09-09

