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

Flask-Caching如何使用提高性能

 更新時間:2025年01月23日 11:29:41   作者:Channing Lewis  
Flask-Caching是提高Flask應用性能的工具,通過緩存數據減少重復計算,加快響應速度,本文就來介紹一下Flask-Caching使用,具有一定的參考價值,感興趣的可以了解一下

在 Flask 中,使用 Flask-Caching 可以顯著提高應用的性能,尤其是對于計算密集型操作、數據庫查詢或外部 API 調用。Flask-Caching 通過存儲數據的副本減少重復計算,從而加快響應速度。

1. 安裝 Flask-Caching

首先,安裝 Flask-Caching:

pip install Flask-Caching

2. 配置 Flask-Caching

在 Flask 應用中,配置緩存類型和參數,例如使用內存、Redis、文件系統(tǒng)等。

示例:使用內存緩存

from flask import Flask, request
from flask_caching import Cache

app = Flask(__name__)

# 配置 Flask-Caching(使用簡單的內存緩存)
app.config['CACHE_TYPE'] = 'SimpleCache'  # 使用簡單內存緩存
app.config['CACHE_DEFAULT_TIMEOUT'] = 300  # 默認緩存超時(秒)

cache = Cache(app)

@app.route('/')
@cache.cached(timeout=60)  # 為此路由緩存60秒
def index():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)

3. 常見緩存類型配置

Flask-Caching 支持多種緩存存儲后端,常見配置如下:

緩存類型CACHE_TYPE 值依賴項
內存緩存SimpleCache
Redis 緩存RedisCachepip install redis
文件系統(tǒng)緩存FileSystemCache
Memcached 緩存MemcachedCachepip install pymemcache
Null(禁用緩存)NullCache

1. 使用 Redis 作為緩存:

app.config['CACHE_TYPE'] = 'RedisCache'
app.config['CACHE_REDIS_HOST'] = 'localhost'
app.config['CACHE_REDIS_PORT'] = 6379
app.config['CACHE_REDIS_DB'] = 0
app.config['CACHE_DEFAULT_TIMEOUT'] = 600  # 10分鐘

2. 使用文件系統(tǒng)緩存:

app.config['CACHE_TYPE'] = 'FileSystemCache'
app.config['CACHE_DIR'] = '/tmp/flask_cache'

4. Flask-Caching 的使用方式

1. 緩存整個視圖函數

@app.route('/data')
@cache.cached(timeout=120)  # 120秒緩存
def expensive_query():
    import time
    time.sleep(5)  # 模擬耗時操作
    return "Expensive data fetched!"

2. 緩存函數調用結果

如果想要緩存某個函數的計算結果:

@cache.memoize(timeout=300)
def compute_expensive_result(x, y):
    import time
    time.sleep(5)  # 模擬耗時
    return x + y

@app.route('/compute')
def compute():
    result = compute_expensive_result(10, 20)
    return f"Computed result: {result}"

3. 基于請求參數緩存

你可以通過 make_cache_key 方法讓緩存基于 URL 參數變化。

@app.route('/user')
@cache.cached(timeout=60, query_string=True)
def user_profile():
    username = request.args.get('name', 'Guest')
    return f"Hello, {username}!"

例如:

  • GET /user?name=Alice 會緩存 Alice 的數據
  • GET /user?name=Bob 會緩存 Bob 的數據

5. 手動控制緩存

1. 設置緩存

cache.set('my_key', 'my_value', timeout=300)  # 設置 300 秒

2. 獲取緩存

value = cache.get('my_key')
if value is None:
    value = "New Value"
    cache.set('my_key', value, timeout=300)
print(value)

3. 刪除緩存

cache.delete('my_key')

4. 清除所有緩存

cache.clear()

6. 高級用法

1. 基于請求 URL 生成緩存鍵

你可以自定義緩存鍵,使緩存結果針對不同的用戶或查詢參數:

def custom_cache_key():
    return request.full_path  # 以完整 URL 作為緩存鍵

@app.route('/product')
@cache.cached(timeout=300, key_prefix=custom_cache_key)
def product():
    return "Product data"

2. 緩存片段

如果想要在模板中緩存某些片段,可以在視圖函數內部使用緩存:

@app.route('/dashboard')
def dashboard():
    stats = cache.get('dashboard_stats')
    if not stats:
        stats = expensive_dashboard_calculation()
        cache.set('dashboard_stats', stats, timeout=600)
    return render_template('dashboard.html', stats=stats)

7. 監(jiān)控和調試緩存

啟用 Flask 的調試模式并添加日志,以查看緩存的命中情況:

app.config['DEBUG'] = True
app.config['CACHE_TYPE'] = 'SimpleCache'
app.config['CACHE_DEFAULT_TIMEOUT'] = 60

啟用 System.debug 記錄緩存的操作:

import logging
logging.basicConfig(level=logging.DEBUG)

8. 常見問題及解決方案

  • 緩存未生效?

    • 確保已正確設置 CACHE_TYPE,并啟用了 CACHE_DEFAULT_TIMEOUT。
    • 確保請求沒有 no-cache 頭,瀏覽器可能繞過緩存。
  • 如何處理緩存依賴變化?

    • 手動 cache.delete() 刪除相關數據的緩存。
  • 如何避免過期導致并發(fā)請求?

    • 使用雙緩存策略,設置短超時和長超時來減少緩存失效影響。

總結

使用 Flask-Caching 提升性能的關鍵點:

  • 選擇合適的緩存后端(如 Redis、文件、內存等)。
  • 在性能瓶頸處添加緩存,如數據庫查詢或復雜計算。
  • 使用 @cache.cached 或 @cache.memoize 避免重復處理。
  • 在適當時機手動清理緩存,防止數據陳舊。

如果你需要更復雜的緩存策略,可以考慮:

  • Flask-Limiter 進行速率限制。
  • Celery 進行異步任務處理,與緩存結合使用。

到此這篇關于Flask-Caching如何使用提高性能的文章就介紹到這了,更多相關Flask-Caching使用提高性能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • python使用ctypes模塊調用windowsapi獲取系統(tǒng)版本示例

    python使用ctypes模塊調用windowsapi獲取系統(tǒng)版本示例

    這篇文章主要介紹了python使用ctypes模塊調用windowsapi獲取系統(tǒng)版本示例,需要的朋友可以參考下
    2014-04-04
  • Python學習小技巧之列表項的拼接

    Python學習小技巧之列表項的拼接

    這篇文章主要給大家介紹了Python學習小技巧之列表項的拼接的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Python生成任意波形并存為txt的實現

    Python生成任意波形并存為txt的實現

    本文主要介紹了Python生成任意波形并存為txt的實現,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • python通過yield實現數組全排列的方法

    python通過yield實現數組全排列的方法

    這篇文章主要介紹了python通過yield實現數組全排列的方法,實例分析了全排列的概念及yield實現的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Python?Pyecharts繪制?;鶊D分析用戶行為路徑

    Python?Pyecharts繪制?;鶊D分析用戶行為路徑

    這篇文章主要為大家介紹了Python?Pyecharts繪制桑基圖分析用戶行為路徑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 解決Pycharm無法import自己安裝的第三方module問題

    解決Pycharm無法import自己安裝的第三方module問題

    今天小編就為大家分享一篇解決Pycharm無法import自己安裝的第三方module問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 關于numpy中np.nonzero()函數用法的詳解

    關于numpy中np.nonzero()函數用法的詳解

    下面小編就為大家?guī)硪黄P于numpy中np.nonzero()函數用法的詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Python數據可視化plt.savefig如何將圖片存入固定路徑

    Python數據可視化plt.savefig如何將圖片存入固定路徑

    這篇文章主要介紹了Python數據可視化plt.savefig如何將圖片存入固定路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python中的logging模塊詳解

    Python中的logging模塊詳解

    這篇文章主要介紹了Python中的logging模塊詳解,默認情況下Python的logging模塊將日志打印到了標準輸出中,且只顯示了大于等于WARNING級別的日志,這說明默認的日志級別設置為WARNING,需要的朋友可以參考下
    2023-09-09
  • Python如何處理JSON數據詳解

    Python如何處理JSON數據詳解

    讀取json數據實際上是把json格式變成python中字典、列表等格式化的數據,極大地方便索引查找,下面這篇文章主要給大家介紹了關于Python如何處理JSON數據的相關資料,需要的朋友可以參考下
    2022-10-10

最新評論