Stories

Detail Return Return

python文件緩存庫requests_cache用法解析 - Stories Detail

  • requests_cache(專門用於 HTTP 請求的緩存庫;支持 SQLite、Redis、文件系統等多種存儲後端;非常適合緩存 HTTP GET 請求的內容。)
  • 同類數據緩存庫:diskcache、joblib
  • 參考資料:

    • https://blog.csdn.net/weixin_46275180/article/details/116459413
    • https://blog.csdn.net/the_shy_faker/article/details/127981863

基本用法與參數含義

requests_cache.install_cache(
    cache_name='cache',         # 緩存文件的名稱
    backend='filesystem',       # 使用文件系統作為緩存後端
    expire_after=None,          # 不設置緩存過期時間,緩存不會過期
    allowable_codes=(200,),     # 僅緩存返回狀態為 200 的響應
    allowable_methods=('GET',), # 僅緩存 GET 請求
    filter_fn=filter_fn,        # 使用自定義過濾函數
    session_factory=requests_cache.core.CachedSession,# 使用默認的 CachedSession
)

為了理解函數功能,介紹下各個參數的含義:

  • cache_name:緩存文件名稱
  • backend:設置緩存的存儲機制,默認使用sqlite進行存儲

    • 支持多種不同的存儲機制:filesystem、memory、sqlite、mongoDB、redis、gridfs、mongodb、dynamodb。在設置存儲機制為第三方軟件數據庫時需要提前安裝對應的模塊。
    • memory(不推薦!):以字典的形式將緩存存儲在內存當中,程序運行完以後緩存將被銷燬。需要注意的是,這樣設置會導致requests_cache 將緩存記錄存儲在內存中。內存中的數據在程序終止或因錯誤導致程序退出時會被釋放。在這種情況下,緩存記錄在 Python 程序重啓後會完全消失。這意味着緩存的有效期在程序退出後不再生效,因為緩存數據本身已經丟失;而且程序重啓後,即使請求的 URL 與之前完全相同,也會重新發起實際的網絡請求,因為之前的緩存記錄已經不復存在。
    • filesystem(推薦):對比memory,filesystem 會將緩存數據存儲在本地文件系統中,這意味着緩存記錄會持久化存儲,程序重啓後緩存依然存在,直到緩存過期或被手動清除。同時可以存儲大量的緩存數據,而不會佔用過多內存,適合大規模的緩存需求
  • expire_after:設置緩存的有效時間(默認單位秒),設置為None則緩存永久有效
  • allowable_codes:設置狀態碼
  • allowable_methods:設置請求方式,默認get,表示只有get請求才可以生成緩存
  • session_factory:設置緩存執行的對象,需要實現CachedSession類
  • backend_options:如果緩存的存儲方式為sqlit、mongo、redis數據庫,該參數表示設置數據庫的連接方式

代碼基本實踐:

一般情況下,不需要單獨設置任何參數,使用默認參數即可

import requests
import requests_cache

# 安裝緩存,設置緩存名稱、後端和過期時間
requests_cache.install_cache(
    cache_name='my_cache',         # 緩存文件名(將存儲為 my_cache.sqlite)
    backend='filesystem',          # 使用文件系統作為緩存後端
    expire_after=3600,             # 緩存有效期為 1 小時(3600 秒)
)

# 發送 GET 請求,第一個請求會從網絡獲取數據,並緩存響應
response1 = requests.get('https://api.github.com')
print("First request, from cache:", response1.from_cache)  # 輸出 False,因為第一次請求會從網絡獲取

# 發送另一個相同的 GET 請求,這次會從緩存中讀取響應
response2 = requests.get('https://api.github.com')
print("Second request, from cache:", response2.from_cache)  # 輸出 True,因為第二次請求會從緩存中讀取

Add a new Comments

Some HTML is okay.