Flask-Cache 看起来已经过时了。您可以切换到Flask-Caching,它是 Flask-Cache 的维护分支。
按模式删除 Redis 键
你有两个选择:
- 使用redis包单独连接到 Redis 。使用包提供的核心命令根据模式搜索键,并删除它们。
- 使用 Flask-Cache / Flask-Caching的受保护方法来访问底层 Redis 对象,并使用该对象上的核心命令根据模式搜索键并删除它们。
选项 1:与 Redis 的单独连接
# 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)
选项 2:使用受保护的方法来访问底层 Redis 连接对象
⚠️尽管这很好用,但这些都是未记录的方法。我浏览了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-Caching 中flask_cache_
是默认的。CACHE_KEY_PREFIX
如果您为 使用了其他值CACHE_KEY_PREFIX
,请使用该值(而不是flask_cache_
)作为搜索模式的前缀。