Django - 緩存

Python的web框架,就Django支持緩存工具剧罩。

根據(jù)緩存存放位置可以分為:

1)放在數(shù)據(jù)庫
2)內(nèi)存級(jí)別緩存(快)
包括:
python-memcached模塊
pylibmc模塊
兩者都是連接memcached機(jī)器。
3)放在文件
4)開發(fā)調(diào)試座泳,沒有放任何地方

一惠昔、配置

1.開發(fā)調(diào)試
此為開始調(diào)試用幕与,實(shí)際內(nèi)部不做任何操作。
注意镇防,BACKEND是引擎啦鸣,每種的引擎都不一樣。
下面的BACKEND下面的都是默認(rèn)的来氧。

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)
                },
                'KEY_PREFIX': '',                                             # 緩存key的前綴(默認(rèn)空)
                'VERSION': 1,                                                 # 緩存key的版本(默認(rèn)1)
                'KEY_FUNCTION' 函數(shù)名                                          # 生成key的函數(shù)(默認(rèn)函數(shù)會(huì)生成為:【前綴:版本:key】)
            }
        }

2.內(nèi)存
此緩存將內(nèi)容保存至內(nèi)存的變量中

 CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                'LOCATION': 'unique-snowflake',
            }
        }

3.文件
此緩存將內(nèi)容保存至文件

CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
                'LOCATION': '/var/tmp/django_cache',
            }
        }

4.數(shù)據(jù)庫
此緩存將內(nèi)容保存至數(shù)據(jù)庫

CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
                'LOCATION': 'my_cache_table', # 數(shù)據(jù)庫表
            }
        }

# 注:執(zhí)行創(chuàng)建表命令 python manage.py createcachetable

5.Memcache緩存(python-memcached模塊)

CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': '127.0.0.1:11211',
        }
    }

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': 'unix:/tmp/memcached.sock',
        }
    }   

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': [
                '172.19.26.240:11211',
                '172.19.26.242:11211',
            ]
        }
    }

緩存

1.全站緩存
比如,自己的博客扑毡,比較適合(沒有評(píng)論胃榕,沒有點(diǎn)贊)。
對(duì)整個(gè)站點(diǎn)做緩存瞄摊,可以對(duì)每個(gè)請(qǐng)求都做緩存勋又,我們可以使用中間件做到這個(gè)目的。

使用中間件泉褐,經(jīng)過一系列的認(rèn)證等操作,如果內(nèi)容在緩存中存在鸟蜡,則使用FetchFromCacheMiddleware獲取內(nèi)容并返回給用戶膜赃,當(dāng)返回給用戶之前,判斷緩存中是否已經(jīng)存在揉忘,如果不存在則UpdateCacheMiddleware會(huì)將緩存保存至緩存跳座,從而實(shí)現(xiàn)全站緩存

MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',
        # 其他中間件...
        'django.middleware.cache.FetchFromCacheMiddleware',
    ]

    CACHE_MIDDLEWARE_ALIAS = ""
    CACHE_MIDDLEWARE_SECONDS = ""
    CACHE_MIDDLEWARE_KEY_PREFIX = ""

2.單個(gè)頁面做緩存

示例:

# views.py
from django.views.decorators.cache import cache_page

@cache_page(10) # 10秒后失效
def cache(request):

    import time
    ctime = time.time()

    return render(request, 'cookie/cache.html', {'ctime':ctime})

# 模板
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>cookie - cache</title>
</head>
<body>
<h1> {{  ctime }} </h1>
<h1> {{  ctime }} </h1>
<h1> {{  ctime }} </h1>
</body>
</html>

3.單個(gè)模板的部分做緩存

# 模板

{% load cache %}  # 需要load cache
<body>
<h1> {{  ctime }} </h1>
<h1> {{  ctime }} </h1>
{% cache 10 key %}    # key 可以隨意取值,存的時(shí)候有用
<h1> {{  ctime }} </h1>
{% endcache %}
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泣矛,一起剝皮案震驚了整個(gè)濱河市疲眷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌您朽,老刑警劉巖狂丝,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哗总,居然都是意外死亡几颜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門讯屈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛋哭,“玉大人,你說我怎么就攤上這事涮母∽恢海” “怎么了躁愿?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沪蓬。 經(jīng)常有香客問我彤钟,道長(zhǎng),這世上最難降的妖魔是什么怜跑? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任样勃,我火速辦了婚禮,結(jié)果婚禮上性芬,老公的妹妹穿的比我還像新娘峡眶。我一直安慰自己,他們只是感情好植锉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布辫樱。 她就那樣靜靜地躺著,像睡著了一般俊庇。 火紅的嫁衣襯著肌膚如雪狮暑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天辉饱,我揣著相機(jī)與錄音搬男,去河邊找鬼。 笑死彭沼,一個(gè)胖子當(dāng)著我的面吹牛缔逛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姓惑,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼褐奴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了于毙?” 一聲冷哼從身側(cè)響起敦冬,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唯沮,沒想到半個(gè)月后脖旱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡介蛉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年夯缺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甘耿。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踊兜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佳恬,到底是詐尸還是另有隱情捏境,我是刑警寧澤于游,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站垫言,受9級(jí)特大地震影響贰剥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筷频,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一蚌成、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凛捏,春花似錦担忧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至示罗,卻和暖如春惩猫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚜点。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工轧房, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绍绘。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓奶镶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親脯倒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子实辑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 緩存就是將你常用的數(shù)據(jù)放在內(nèi)存里面捺氢,方便大量的訪問藻丢,每次請(qǐng)求過來之后,django都會(huì)優(yōu)先訪問緩存摄乒,看看緩存里面有...
    戴維得閱讀 542評(píng)論 0 0
  • 緩存是為了保存那些需要很多計(jì)算資源的結(jié)果悠反,這樣的話就不必在下次重復(fù)消耗計(jì)算資源。 下面我們用偽代碼馍佑,來解釋緩存怎樣...
    SingleDiego閱讀 2,865評(píng)論 0 0
  • 緩存 計(jì)算機(jī)的讀寫速度在不同的硬件中是不同的斋否,通常讀寫速度由慢到快順序?yàn)椋河脖P文件 > 內(nèi)存空間 > 寄存器【數(shù)據(jù)...
    妄想成為正太的包蜀黍閱讀 2,109評(píng)論 0 6
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,503評(píng)論 6 427
  • 如果人只有七秒鐘的記憶那該有多好呀! 都說:“魚只有七秒鐘的記憶”拭荤,可魚活的多自由自在茵臭、多快樂呀!我真的希...
    七秒游藝閱讀 628評(píng)論 0 1