欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解讀Django框架中的低層次緩存API

 更新時間:2015年07月24日 10:20:27   投稿:goldensun  
這篇文章主要介紹了解讀Django框架中的低層次緩存API,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下

有些時候,對整個經(jīng)解析的頁面進行緩存并不會給你帶來太多好處,事實上可能會過猶不及。

比如說,也許你的站點所包含的一個視圖依賴幾個費時的查詢,每隔一段時間結(jié)果就會發(fā)生變化。 在這種情況下,使用站點級緩存或者視圖級緩存策略所提供的整頁緩存并不是最理想的,因為你可能不會想對整個結(jié)果進行緩存(因為一些數(shù)據(jù)經(jīng)常變化),但你仍然會想對很少變化的部分進行緩存。

針對這樣的情況,Django提供了簡單低級的緩存API。 你可以通過這個API,以任何你需要的粒度來緩存對象。 你可以對所有能夠安全進行 pickle 處理的 Python 對象進行緩存: 字符串、字典和模型對象列表等等。 (查閱 Python 文檔可以了解到更多關(guān)于 pickling 的信息。)

緩存模塊django.core.cache擁有一個自動依據(jù)CACHE_BACKEND設(shè)置創(chuàng)建的django.core.cache對象。

>>> from django.core.cache import cache

基本的接口是 set(key, value, timeout_seconds) 和 get(key) :

>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
'hello, world!'

timeout_seconds 參數(shù)是可選的, 并且默認為前面講過的 CACHE_BACKEND 設(shè)置中的 timeout 參數(shù).

如果緩存中不存在該對象,那么cache.get()會返回None。

# Wait 30 seconds for 'my_key' to expire...

>>> cache.get('my_key')
None

我們不建議在緩存中保存 None 常量,因為你將無法區(qū)分你保存的 None 變量及由返回值 None 所標識的緩存未命中。

cache.get() 接受一個 缺省 參數(shù)。 它指定了當緩存中不存在該對象時所返回的值:

>>> cache.get('my_key', 'has expired')
'has expired'

使用add()方法來新增一個原來沒有的鍵值。 它接受的參數(shù)和set()一樣,但是并不去嘗試更新已經(jīng)存在的鍵值。

>>> cache.set('add_key', 'Initial value')
>>> cache.add('add_key', 'New value')
>>> cache.get('add_key')
'Initial value'

如果想確定add()是否成功添加了緩存值,你應(yīng)該測試返回值。 成功返回True,失敗返回False。

還有個get_many()接口。 get_many() 所返回的字典包括了你所請求的存在于緩存中且未超時的所有鍵值。

>>> cache.set('a', 1)
>>> cache.set('b', 2)
>>> cache.set('c', 3)
>>> cache.get_many(['a', 'b', 'c'])
{'a': 1, 'b': 2, 'c': 3}

最后,你可以用 cache.delete() 顯式地刪除關(guān)鍵字。

>>> cache.delete('a')

也可以使用incr()或者decr()來增加或者減少已經(jīng)存在的鍵值。 默認情況下,增加或減少的值是1??梢杂脜?shù)來制定其他值。 如果嘗試增減不存在的鍵值會拋出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),增減操作才是原子的。 然而,如果后端并不原生支持增減操作,也可以通過取值/更新兩步操作來實現(xiàn)。

相關(guān)文章

  • 查看Python安裝路徑幾種方法

    查看Python安裝路徑幾種方法

    在使用python的時候,有時候會需要找到python包的安裝位置,本文主要介紹了查看Python安裝路徑幾種方法,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Python編程之event對象的用法實例分析

    Python編程之event對象的用法實例分析

    這篇文章主要介紹了Python編程之event對象的用法,結(jié)合實例形式分析了event對象在線程通信中的作用與使用方法,需要的朋友可以參考下
    2017-03-03
  • 舉例講解Python編程中對線程鎖的使用

    舉例講解Python編程中對線程鎖的使用

    Python的threading模塊中提供了多種鎖的相關(guān)方法,Python的多線程不能同時執(zhí)行,因而鎖的使用非常關(guān)鍵,下面我們就來舉例講解Python編程中對線程鎖的使用:
    2016-07-07
  • Python3實現(xiàn)抓取javascript動態(tài)生成的html網(wǎng)頁功能示例

    Python3實現(xiàn)抓取javascript動態(tài)生成的html網(wǎng)頁功能示例

    這篇文章主要介紹了Python3實現(xiàn)抓取javascript動態(tài)生成的html網(wǎng)頁功能,結(jié)合實例形式分析了Python3使用selenium庫針對javascript動態(tài)生成的HTML網(wǎng)頁元素進行抓取的相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • python requests指定出口ip的例子

    python requests指定出口ip的例子

    今天小編就為大家分享一篇python requests指定出口ip的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python高級架構(gòu)模式知識點總結(jié)

    Python高級架構(gòu)模式知識點總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于Python高級架構(gòu)模式知識點總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-08-08
  • Python生成隨機驗證碼的兩種方法

    Python生成隨機驗證碼的兩種方法

    使用python生成隨機驗證碼的方法有很多種,今天小編給大家分享兩種方法,大家可以靈活運用這兩種方法,設(shè)計出適合自己的驗證碼方法
    2015-12-12
  • 在NumPy中創(chuàng)建空數(shù)組/矩陣的方法

    在NumPy中創(chuàng)建空數(shù)組/矩陣的方法

    今天小編就為大家分享一篇在NumPy中創(chuàng)建空數(shù)組/矩陣的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python?異步之如何獲取當前和正在運行任務(wù)詳解

    Python?異步之如何獲取當前和正在運行任務(wù)詳解

    這篇文章主要為大家介紹了Python?異步之如何獲取當前和正在運行任務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Python中property屬性的用處詳解

    Python中property屬性的用處詳解

    這篇文章主要給大家介紹了關(guān)于Python中property屬性的相關(guān)資料,需簡單地說就是一個類里面的方法一旦被@property裝飾,就可以像調(diào)用屬性一樣地去調(diào)用這個方法,它能夠簡化調(diào)用者獲取數(shù)據(jù)的流程,而且不用擔心將屬性暴露出來,有人對其進行賦值操作,下面要的朋友可以參考下
    2022-04-04

最新評論