- 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,因為第二次請求會從緩存中讀取