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

詳解python中flask_caching庫的用法

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

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

安裝flask_caching庫:

pip install flask_caching

緩存類型

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

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

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

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

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

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

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

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

  • CACHE_DEFAULT_TIMEOUT:如果未指定超時,則使用默認(rèn)超時,時間單位是秒;
  • CACHE_KEY_PREFIX:所有它都可以用于應(yīng)用程序的應(yīng)用程序使用相同的鍵;
  • CACHE_OPTIONS:在緩存類實例化期間傳遞的可選字典;
  • CACHE_REDIS_HOST:Redis 服務(wù)器主機;
  • CACHE_REDIS_PORT:Redis 服務(wù)器端口,默認(rèn)為 6379;
  • CACHE_REDIS_PASSWORD:服務(wù)器的 Redis 密碼;
  • CACHE_REDIS_DB :Redis db(從零開始的數(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ù)器的名稱
  • CACHE_REDIS_PASSWORD:服務(wù)器的 Redis 密碼;
  • CACHE_REDIS_DB:Redis db(從零開始的數(shù)字索引),默認(rèn)為 0。

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

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

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

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

SASLMemcachedCache:啟用SASL的memcached服務(wù)器作為緩存后端,其配置參數(shù)可以有:

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

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

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

注意:該UWSGICache沒有維護也沒有測試,不建議使用。

配置參數(shù)

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

初始化

以緩存類型為RedisCache為例:

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

Cache對象的主要方法有:

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

其中:timeout為超時時間;

可選參數(shù)有:

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

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

使用緩存

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

示例代碼:

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

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

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

示例代碼:

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

運行結(jié)果:

示例代碼:

from flask import Flask, request
from flask_caching import Cache
app = Flask(__name__)
# simple使用字典存儲
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()

運行結(jié)果:

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

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

相關(guān)文章

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

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

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

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

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

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

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

    Python圖像運算之圖像銳化和邊緣檢測

    這篇文章主要和大家講解一下常見的圖像銳化和邊緣檢測方法,即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
  • 一起來學(xué)習(xí)一下python的數(shù)據(jù)類型

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

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

    PyQt5圖形界面播放音樂的實例

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

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

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

    詳解Scrapy Redis入門實戰(zhàn)

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

最新評論