[英]flask cache: list keys based on a pattern?
我使用 Flask Cache 插件和 Redis 作為后端來緩存我的 API 響應。 假設我有 API 來獲取用戶並創建這樣的用戶:
/api/users?page=1 GET
/api/users POST
GET 結果將以完整 URL 為鍵進行緩存。 創建新用戶時,我想刪除所有以/api/users
開頭的鍵 - 目前我正在執行cache.clear()
但似乎幾乎沒有必要。
但是,我似乎找不到用於獲取密鑰列表的 API。 使用redis-py
,有一個用於此目的的keys(*pattern)
API。 Flask Cache 有類似的 API 嗎?
Flask-Cache 看起來已經過時了。 您可以切換到Flask-Caching ,它是 Flask-Cache 的維護分支。
你有兩個選擇:
# python utility for redis
import redis
r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB, password=REDIS_PASSWORD)
def delete_pattern(pattern: str) -> int:
"""Remove all keys matching pattern.
"""
count = 0
for key in r.scan_iter(pattern):
r.delete(key)
count += 1
return count
# pass pattern to delete
CACHE_URL_PAT = "flask_cache*auth*"
delete_pattern(CACHE_URL_PAT)
⚠️ 盡管這工作正常,但這些是未記錄的方法。 我瀏覽了 GitHub 上的源代碼來創建這個函數。 僅針對 CACHE_TYPE = 'redis' 進行測試
# initialised cache object stored in extensions file
from app.extensions import cache
def delete_pattern(pattern):
status = False
binary_keys = cache.cache._read_clients.keys(pattern)
keys = [k.decode("utf-8", errors="ignore") for k in binary_keys if k]
if keys:
status = cache.cache._write_client.delete(*keys)
return status
# pass pattern to delete
CACHE_URL_PAT = "flask_cache*auth*"
delete_pattern(CACHE_URL_PAT)
注意: flask_cache_
是 Flask-Caching 中的默認CACHE_KEY_PREFIX
。 如果您為CACHE_KEY_PREFIX
使用了其他值,請使用它(而不是flask_cache_
)作為搜索模式的前綴。
Flask 緩存插件不提供原始 redis 命令的任何訪問點。 您可以使用 redis-py 連接到相同的 redis 實例和數據庫以按模式刪除鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.