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

詳解python中flask_caching庫(kù)的用法

 更新時(shí)間:2023年05月09日 10:21:37   作者:IT之一小佬  
這篇文章主要介紹了詳解python中flask_caching庫(kù)的用法,可以在一定的時(shí)間內(nèi)直接返回結(jié)果而不是每次都需要計(jì)算或者從數(shù)據(jù)庫(kù)中查找。flask_caching插件就是提供這種功能的神器,需要的朋友可以參考下

為了盡量減少緩存穿透,并同時(shí)減少web的響應(yīng)時(shí)間,可以針對(duì)那些需要一定時(shí)間才能獲取結(jié)果的函數(shù)和那些不需要頻繁更新的視圖函數(shù)提供緩存服務(wù),可以在一定的時(shí)間內(nèi)直接返回結(jié)果而不是每次都需要計(jì)算或者從數(shù)據(jù)庫(kù)中查找。flask_caching插件就是提供這種功能的神器。

安裝flask_caching庫(kù):

pip install flask_caching

緩存類(lèi)型

flask-caching內(nèi)置的緩存類(lèi)型CACHE_TYPE有:NullCache、SimpleCache、FileSystemCache、RedisCache、RedisSentinelCache、RedisClusterCache、UWSGICache、MemcachedCache、SASLMemcachedCache和SpreadSASLMemcachedCache(在Flask-Caching2.0中刪除)。

NullCache:無(wú)緩存,其配置參數(shù)可以有:

  • CACHE_NO_NULL_WARNING:不會(huì)拋出警告信息;
  • CACHE_DEFAULT_TIMEOUT:如果未指定超時(shí),則使用默認(rèn)超時(shí),時(shí)間單位是秒。

SimpleCache:使用本地python字典進(jìn)行存儲(chǔ),非線程安全,其配置參數(shù)可以有:

  • CACHE_DEFAULT_TIMEOUT:如果未指定超時(shí),則使用默認(rèn)超時(shí),時(shí)間單位是秒;
  • CACHE_THRESHOLD:最大緩存數(shù);
  • CACHE_IGNORE_ERRORS:其值為T(mén)rue時(shí),在刪除過(guò)程中發(fā)生的任何錯(cuò)誤將被忽略;其值為False時(shí),在刪除過(guò)程中第一個(gè)錯(cuò)誤時(shí)停止刪除;

FileSystemCache:使用文件系統(tǒng)來(lái)存儲(chǔ)緩存的值,其配置參數(shù)可以有:

  • CACHE_DEFAULT_TIMEOUT:如果未指定超時(shí),則使用默認(rèn)超時(shí),時(shí)間單位是秒;
  • CACHE_IGNORE_ERRORS:其值為T(mén)rue時(shí),在刪除過(guò)程中發(fā)生的任何錯(cuò)誤將被忽略;其值為False時(shí),在刪除過(guò)程中第一個(gè)錯(cuò)誤時(shí)停止刪除;
  • CACHE_DIR:存儲(chǔ)緩存的目錄;
  • CACHE_THRESHOLD:最大緩存數(shù);
  • CACHE_OPTIONS:在緩存類(lèi)實(shí)例化期間傳遞的可選字典。

RedisCache:使用Redis作為緩存后端,其配置參數(shù)可以有:

  • CACHE_DEFAULT_TIMEOUT:如果未指定超時(shí),則使用默認(rèn)超時(shí),時(shí)間單位是秒;
  • CACHE_KEY_PREFIX:所有它都可以用于應(yīng)用程序的應(yīng)用程序使用相同的鍵;
  • CACHE_OPTIONS:在緩存類(lèi)實(shí)例化期間傳遞的可選字典;
  • CACHE_REDIS_HOST:Redis 服務(wù)器主機(jī);
  • CACHE_REDIS_PORT:Redis 服務(wù)器端口,默認(rèn)為 6379;
  • CACHE_REDIS_PASSWORD:服務(wù)器的 Redis 密碼;
  • CACHE_REDIS_DB :Redis db(從零開(kāi)始的數(shù)字索引),默認(rèn)為 0;
  • CACHE_REDIS_URL:| 連接到 Redis 服務(wù)器的 URL,例子redis://user:password@localhost:6379/2 。

RedisSentinelCache:使用Redis哨兵模型緩存,其配置參數(shù)可以有:

  • CACHE_KEY_PREFIX:所有它都可以用于應(yīng)用程序的應(yīng)用程序使用相同的鍵;
  • CACHE_REDIS_SENTINELS:Redis哨兵地址的列表或元組;
  • CACHE_REDIS_SENTINEL_MASTER:哨兵配置中的主服務(wù)器的名稱(chēng)
  • CACHE_REDIS_PASSWORD:服務(wù)器的 Redis 密碼;
  • CACHE_REDIS_DB:Redis db(從零開(kāi)始的數(shù)字索引),默認(rèn)為 0。

RedisClusterCache:使用Redis自動(dòng)分區(qū)緩存,其配置參數(shù)可以有:

  • CACHE_KEY_PREFIX:所有它都可以用于應(yīng)用程序的應(yīng)用程序使用相同的鍵;
  • CACHE_REDIS_CLUSTER:一串以逗號(hào)分隔的 Redis 集群節(jié)點(diǎn)地址;
  • CACHE_REDIS_PASSWORD:服務(wù)器的 Redis 密碼。

MemcachedCache:使用memcached服務(wù)器作為緩存后端,支持pylibmc或memcache或Google應(yīng)用程序引擎memcache庫(kù),其配置參數(shù)可以有:

  • CACHE_DEFAULT_TIMEOUT:如果未指定超時(shí),則使用默認(rèn)超時(shí),時(shí)間單位是秒;
  • CACHE_KEY_PREFIX:所有它都可以用于應(yīng)用程序的應(yīng)用程序使用相同的鍵;
  • CACHE_MEMCACHED_SERVERS:服務(wù)器地址的列表或元組。
  • 注意:Flask-Caching不會(huì)將額外的配置選項(xiàng)傳遞給memcached后端,要向這些緩存添加其他配置。

SASLMemcachedCache:?jiǎn)⒂肧ASL的memcached服務(wù)器作為緩存后端,其配置參數(shù)可以有:

  • CACHE_DEFAULT_TIMEOUT:如果未指定超時(shí),則使用默認(rèn)超時(shí),時(shí)間單位是秒;
  • CACHE_KEY_PREFIX:所有它都可以用于應(yīng)用程序的應(yīng)用程序使用相同的鍵;
  • CACHE_OPTIONS:在緩存類(lèi)實(shí)例化期間傳遞的可選字典;
  • CACHE_MEMCACHED_SERVERS:服務(wù)器地址的列表或元組;
  • CACHE_MEMCACHED_USERNAME:使用memcached進(jìn)行SASL身份驗(yàn)證的用戶(hù)名;
  • CACHE_MEMCACHED_PASSWORD:使用memcached進(jìn)行SASL身份驗(yàn)證的密碼。

UWSGICache:使用uwsgi服務(wù)器作為緩存,其配置參數(shù)可以有:

  • CACHE_UWSGI_NAME:要連接的uwsgi緩存實(shí)例的名稱(chēng),例如:mycache @ localhost :3031,默認(rèn)為空字符串;

注意:該UWSGICache沒(méi)有維護(hù)也沒(méi)有測(cè)試,不建議使用。

配置參數(shù)

CACHE_TYPE:設(shè)置緩存的類(lèi)型
# 下面五個(gè)參數(shù)是所有的類(lèi)型共有的
CACHE_NO_NULL_WARNING = "warning" # null類(lèi)型時(shí)的警告消息
CACHE_ARGS = []    # 在緩存類(lèi)實(shí)例化過(guò)程中解包和傳遞的可選列表,用來(lái)配置相關(guān)后端的額外的參數(shù)
CACHE_OPTIONS = {}    # 可選字典,在緩存類(lèi)實(shí)例化期間傳遞,也是用來(lái)配置相關(guān)后端的額外的鍵值對(duì)參數(shù)
CACHE_DEFAULT_TIMEOUT # 默認(rèn)過(guò)期/超時(shí)時(shí)間,單位為秒
CACHE_THRESHOLD    # 緩存的最大條目數(shù)
CACHE_TYPE = null # 默認(rèn)的緩存類(lèi)型,無(wú)緩存
CACHE_TYPE = 'simple' # 使用本地python字典進(jìn)行存儲(chǔ),線程非安全
CACHE_TYPE = 'filesystem' # 使用文件系統(tǒng)來(lái)存儲(chǔ)緩存的值
CACHE_DIR = "" # 文件目錄
CACHE_TYPE = 'memcached' # 使用memcached服務(wù)器緩存
CACHE_KEY_PREFIX # 設(shè)置cache_key的前綴
CAHCE_MEMCACHED_SERVERS    # 服務(wù)器地址的列表或元組
CACHE_MEMCACHED_USERNAME # 用戶(hù)名
CACHE_MEMCACHED_PASSWORD # 密碼
CACHE_TYPE = 'uwsgi' # 使用uwsgi服務(wù)器作為緩存
CACHE_UWSGI_NAME # 要連接的uwsgi緩存實(shí)例的名稱(chēng)
CACHE_TYPE = 'redis' # 使用redis作為緩存
CACHE_KEY_PREFIX # 設(shè)置cache_key的前綴
CACHE_REDIS_HOST  # redis地址
CACHE_REDIS_PORT  # redis端口
CACHE_REDIS_PASSWORD # redis密碼
CACHE_REDIS_DB # 使用哪個(gè)數(shù)據(jù)庫(kù)
# 也可以一鍵配置
CACHE_REDIS_URL    連接到Redis服務(wù)器的URL。示例redis://user:password@localhost:6379/2

初始化

以緩存類(lèi)型為RedisCache為例:

from flask import Flask
from flask_caching import Cache
import time
# 配置RedisCache緩存類(lèi)型參數(shù)值,使用本地的redis,沒(méi)有密碼
config = {
    'CACHE_TYPE': 'redis',  # 使用redis作為緩存
    'CACHE_REDIS_HOST': '127.0.0.1',  # redis地址
    'CACHE_REDIS_PORT': 6379  # redis端口號(hào)
}
# simple
# cache = Cache(app, config={'CACHE_TYPE': 'simple'})
app = Flask(__name__)
# 初始化緩存
cache = Cache(app=app, config=config)  # 創(chuàng)建Cache對(duì)象
# 或使用init_app()初始化緩存
# cache = Cache()         # 創(chuàng)建Cache對(duì)象
# cache.init_app(app=app, config=config)
@app.route('/')
def index():
    return 'hello world!'
if __name__ == '__main__':
    app.run()

Cache對(duì)象的主要方法有:

#裝飾器,裝飾無(wú)參數(shù)函數(shù),緩存該函數(shù)
@cache.cached(timeout=None, key_prefix=None, unless=None, forced_update=None, query_string=False)

其中:timeout為超時(shí)時(shí)間;

可選參數(shù)有:

  • key_prefix:緩存指定的函數(shù);
  • unless:是否啟用緩存,如果為T(mén)rue,不啟用緩存;
  • forced_update:緩存是否實(shí)時(shí)更新,如果為T(mén)rue,無(wú)論是否過(guò)期都將更新緩存;
  • query_string:為T(mén)rue時(shí),緩存鍵是先將參數(shù)排序然后哈希的結(jié)果。
#裝飾器,裝飾有參數(shù)函數(shù),緩存該函數(shù)
@cache.memoize(timeout=None, make_name=None, unless=None, forced_update=None, query_string=False)

與cache.cached()方法類(lèi)似,區(qū)別為cache.memoize有make_name,其作用是設(shè)置函數(shù)的標(biāo)志,如果沒(méi)有就使用裝飾的函數(shù)。

使用緩存

為了能更好地體現(xiàn)效果,通過(guò)設(shè)置休眠時(shí)間來(lái)模擬數(shù)據(jù)加載時(shí)間。

示例代碼:

from flask import Flask
from flask_caching import Cache
import time
# 配置RedisCache緩存類(lèi)型參數(shù)值,使用本地的redis,沒(méi)有密碼
config = {
    'CACHE_TYPE': 'redis',  # 使用redis作為緩存
    'CACHE_REDIS_HOST': '127.0.0.1',  # redis地址
    'CACHE_REDIS_PORT': 6379  # redis端口號(hào)
}
app = Flask(__name__)
# 初始化緩存
cache = Cache(app=app, config=config)  # 創(chuàng)建Cache對(duì)象
# 或使用init_app()初始化緩存
# cache = Cache()         # 創(chuàng)建Cache對(duì)象
# cache.init_app(app=app, config=config)
@app.route('/')
@cache.cached(timeout=200)  # 設(shè)置超時(shí)時(shí)間
def index():
    time.sleep(5)
    return 'hello world!'
if __name__ == '__main__':
    app.run()

在緩存對(duì)象中,我們可以使用以下代碼來(lái)設(shè)置、獲取、刪除緩存對(duì)象:

# 設(shè)置
cache.set(key, value, timeout=None)  # 設(shè)置一個(gè)緩存對(duì)象
cache.set_many({key: value, key: value, ..., key: value}, timeout=None)  # 設(shè)置多個(gè)緩存對(duì)象
# 獲取
cache.get(key)  # 獲取一個(gè)緩存對(duì)象
cache.get_many(key1, key2, ....)  # 獲取多個(gè)緩存對(duì)象
# 刪除
cache.get.delete(key)  # 刪除一個(gè)緩存對(duì)象
cache_delete_many(key1, key2, ...)  # 刪除多個(gè)緩存對(duì)象
cache.clear()  # 刪除所有緩存對(duì)象

示例代碼:

from flask import Flask
from flask_caching import Cache
# 配置RedisCache緩存類(lèi)型參數(shù)值,使用本地的redis,沒(méi)有密碼
config = {
    'CACHE_TYPE': 'redis',  # 使用redis作為緩存
    'CACHE_REDIS_HOST': '127.0.0.1',  # redis地址
    'CACHE_REDIS_PORT': 6379  # redis端口號(hào)
}
app = Flask(__name__)
# 初始化緩存
cache = Cache(app=app, config=config)  # 創(chuàng)建Cache對(duì)象
# 或使用init_app()初始化緩存
# cache = Cache()         # 創(chuàng)建Cache對(duì)象
# cache.init_app(app=app, config=config)
@app.route('/')
def index():
    cache.set('name', '王五', timeout=30)  # 設(shè)置鍵為name,value為小明,超時(shí)時(shí)間為30秒的緩存對(duì)象
    print(cache.get('name'))  # 打印鍵為name的緩存對(duì)象值
    cache.set_many({'name1': '李四', 'name2': '張三'}, timeout=30)  # 設(shè)置多個(gè)緩存對(duì)象
    print(cache.get_many("name1", "name2"))  # 打印多個(gè)緩存對(duì)象值
    print(cache.delete("name"))  # 刪除鍵為name的緩存對(duì)象
    print(cache.delete_many("name1", "name2"))  # 刪除多個(gè)緩存對(duì)象
    print(cache.get_many("name1", "name2"))  # 打印多個(gè)緩存對(duì)象值
    return '緩存對(duì)象'
if __name__ == '__main__':
    app.run()

運(yùn)行結(jié)果:

示例代碼:

from flask import Flask, request
from flask_caching import Cache
app = Flask(__name__)
# simple使用字典存儲(chǔ)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})
@app.route('/')
@cache.cached(timeout=20)
def index():
    print(request.path)
    s = 'test cache'
    cache.set('b', 123)
    print('test cache')
    return s
@app.route('/test')
def test():
    print(cache.get('b'))
    return 'ok'
if __name__ == '__main__':
    app.run()

運(yùn)行結(jié)果:

更多flask_caching用法詳見(jiàn)官方網(wǎng)址:Flask-Caching — Flask-Caching 1.0.0 documentation

到此這篇關(guān)于詳解python中flask_caching庫(kù)的用法的文章就介紹到這了,更多相關(guān)python中flask_caching庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 講解python參數(shù)和作用域的使用

    講解python參數(shù)和作用域的使用

    本文會(huì)介紹如何將語(yǔ)句組織成函數(shù),還會(huì)詳細(xì)介紹參數(shù)和作用域的概念,以及遞歸的概念及其在程序中的用途。
    2013-11-11
  • 如何將python腳本打包為exe可執(zhí)行文件

    如何將python腳本打包為exe可執(zhí)行文件

    這篇文章主要介紹了如何將python腳本打包為exe可執(zhí)行文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 簡(jiǎn)介Python中用于處理字符串的center()方法

    簡(jiǎn)介Python中用于處理字符串的center()方法

    這篇文章主要介紹了簡(jiǎn)介Python中用于處理字符串的center()方法,是Python入門(mén)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Python圖像運(yùn)算之圖像銳化和邊緣檢測(cè)

    Python圖像運(yùn)算之圖像銳化和邊緣檢測(cè)

    這篇文章主要和大家講解一下常見(jiàn)的圖像銳化和邊緣檢測(cè)方法,即Roberts算子和Prewitt算子。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12
  • python創(chuàng)造虛擬環(huán)境方法總結(jié)

    python創(chuàng)造虛擬環(huán)境方法總結(jié)

    在本篇內(nèi)容里我們給大家整理了關(guān)于python創(chuàng)造虛擬環(huán)境的詳細(xì)方法和步驟,需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • Python 如何定義匿名或內(nèi)聯(lián)函數(shù)

    Python 如何定義匿名或內(nèi)聯(lián)函數(shù)

    這篇文章主要介紹了Python 如何定義匿名或內(nèi)聯(lián)函數(shù),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 一起來(lái)學(xué)習(xí)一下python的數(shù)據(jù)類(lèi)型

    一起來(lái)學(xué)習(xí)一下python的數(shù)據(jù)類(lèi)型

    這篇文章主要為大家詳細(xì)介紹了python的數(shù)據(jù)類(lèi)型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下希望能夠給你帶來(lái)幫助
    2022-01-01
  • PyQt5圖形界面播放音樂(lè)的實(shí)例

    PyQt5圖形界面播放音樂(lè)的實(shí)例

    今天小編就為大家分享一篇PyQt5圖形界面播放音樂(lè)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 淺析python函數(shù)式編程

    淺析python函數(shù)式編程

    這篇文章主要介紹了python函數(shù)式編程的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • 詳解Scrapy Redis入門(mén)實(shí)戰(zhàn)

    詳解Scrapy Redis入門(mén)實(shí)戰(zhàn)

    這篇文章主要介紹了詳解Scrapy Redis入門(mén)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論