有些時候,對整個經解析的頁面進行快取並不會給你帶來太多好處,事實上可能會過猶不及。
比如說,也許你的站點所包含的乙個檢視依賴幾個費時的查詢,每隔一段時間結果就會發生變化。 在這種情況下,使用站點級快取或者檢視級快取策略所提供的整頁快取並不是最理想的,因為你可能不會想對整個結果進行快取(因為一些資料經常變化),但你仍然會想對很少變化的部分進行快取。
針對這樣的情況,django提供了簡單低階的快取api。 你可以通過這個api,以任何你需要的粒度來快取物件。 你可以對所有能夠安全進行 pickle 處理的 python 物件進行快取: 字串、字典和模型物件列表等等。 (查閱 python 文件可以了解到更多關於 pickling 的資訊。)
快取模組django.core.cache擁有乙個自動依據cache_backend設定建立的django.core.cache物件。
>>> from django.core.cache import cache
基本的介面是 set(key, value, timeou程式設計客棧t_seconds) 和 get(key) :
>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
'hello, world!'
timeout_seconds 引數是可選的, 並且預設為前面講過的 cache_backend 設定中的 timeout 引數.
如果快取中不存在該物件,那麼cache.get()會返回none。
# wait 30 seconds f 'my_key' to expire...
>>> cache.get('my_key')
none
我們不建議在快取中儲存 none 常量,因為你將無法區分你儲存的 none 變數及由返回值 none 所標識的快取未命中。
cache.get() 接受乙個 預設 引數。 它指定了當快取中不存在該物件時所返回的值:
>>程式設計客棧》 cache'my_key', 'has expired')
'has expired'
使用add()方法來新增乙個原來沒有的鍵值。 它接受的引數和set()一樣,但是並不去嘗試更新已經存在的鍵值。
>>> cache.set('add_key', 'initial value')
>>> cache.add('add_key', 'new value')
>>> cache.get('add_key')
'initial value'
如果想確定add()是否成功新增了快取值,你應該測試返回值。 成功返回true,失敗返回false。
還有個get_many()介面。 get_many() 所返回的字典包括了你所請求的存在於快取中且未超時的所有鍵值。
>>> cache.set('a', 1)
>>> cache.set('b', 2)
>>> cache.set('c', 3)
>>> cache.get_'a', 'b', 'c'])
最後,你可以用 cache.delete() 顯式地刪除關鍵字。
>>> cache.delete('a')
也可以使用incr()或者decr()來增加或者減少已經存在的鍵值。 預設情況下,增加或減少的值是1。可以用引數來制定其他值。 如果嘗試增減不存在的鍵值會丟擲valueerror。
>>> cache.set('num', 1)
>>> cache.incr('num')
2>>> cache.incr('num', 10)
12>>> cache.decr('num')
11>>> cache.decr('num', 5)
6注意incr()/decr()方法不是原子操作。 在支援原子增減的快取後端上(最著名的是memcached),增減操作才是原子的。 然而,如果後端並不原生支援增減操作,也可以通過取值/更新兩步操作來實現。
本文標題: 解讀django框架中的低層次快取api
本文位址:
低層次的渲染應用程式程式設計介面 Metal
metal 是一種低層次的渲染應用程式程式設計介面,提供了軟體所需的最低層,保證軟體可以執行在不同的圖形晶元上。metal 提公升了 a7 與 a8 處理器效能,讓其效能完全發揮。簡介 ios 已然是廣受歡迎的移動遊戲平台,如今 ios 8 讓這一平台更加廣闊,因為遊戲開發者擁有了煥然一新的先進技術...
Python的Django框架中if標籤的相關使用
標籤檢查 evaluate 乙個變數,如果這個變數為真 即,變數存在,非空,不是布林值假 系統會顯示在 和 之間的任何內容,例如 welcome to the weekend 標籤是可選的 welcome to the weekend get back to work.ttotlncp python...
Django框架中media的使用
1.如果在django專案的配置檔案裡面配置了以下內容,它的含義就是開了乙個路由,外部可以通過這個位址訪問我的專案。staticfiles dirs os.path.join base dir,static 2.在django框架中,static檔案和media檔案的區別 在django框架中,這兩...