Python flask缓存:基于模式列出键?

Python flask缓存:基于模式列出键?,python,caching,flask,redis,flask-cache,Python,Caching,Flask,Redis,Flask Cache,我正在使用Flask缓存插件和Redis作为后端来缓存我的API响应。假设我有API来获取用户并创建如下用户: /api/users?page=1 GET /api/users POST 获取结果将以完整URL作为键进行缓存。创建新用户时,我想删除所有以/api/users开头的键-目前我正在执行缓存.clear(),但这似乎不是必需的 然而,我似乎找不到API来获取密钥列表。对于redispy,有一个keys(*模式)API用于此目的。Flask Cache是否有类似的AP

我正在使用Flask缓存插件和Redis作为后端来缓存我的API响应。假设我有API来获取用户并创建如下用户:

/api/users?page=1  GET
/api/users         POST
获取结果将以完整URL作为键进行缓存。创建新用户时,我想删除所有以
/api/users
开头的键-目前我正在执行
缓存.clear()
,但这似乎不是必需的


然而,我似乎找不到API来获取密钥列表。对于
redispy
,有一个
keys(*模式)
API用于此目的。Flask Cache是否有类似的API?

Flask Cache插件不提供任何原始redis命令的访问点。 您可以使用redis py连接到相同的redis实例和数据库,以按模式删除键

烧瓶缓存看起来过时了。您可以切换到由Flask缓存的分支维护的对象

按模式删除Redis键 您有两个选择:

  • 使用软件包分别连接到Redis。使用包提供的核心命令根据模式搜索键,然后删除它们
  • 使用Flask Cache/的受保护方法访问底层Redis对象,并使用该对象上的核心命令根据模式搜索键,然后将其删除
  • 选项1:单独连接到Redis 用于redis的python实用程序 导入redis r=redis.redis(主机=redis\u主机,端口=redis\u端口,db=redis\u db,密码=redis\u密码) def delete_模式(模式:str)->int: “”“删除与模式匹配的所有密钥。”。 """ 计数=0 对于r.scan\u iter(模式)中的键: r、 删除(键) 计数+=1 返回计数 #传递要删除的模式 CACHE\u URL\u PAT=“flask\u CACHE*auth*” 删除模式(缓存URL PAT) 选项2:使用受保护的方法访问底层Redis连接对象 ⚠️ 尽管这很好,但这些都是未记录的方法。我通过GitHub上的程序创建了这个函数。 仅针对CACHE_TYPE='redis'进行测试

    #存储在扩展名文件中的初始化缓存对象
    从app.extensions导入缓存
    def delete_模式(模式):
    状态=错误
    binary\u keys=cache.cache.\u read\u clients.keys(模式)
    keys=[k.decode(“utf-8”,errors=“ignore”)表示二进制中的k\u键,如果k]
    如果是关键点:
    状态=cache.cache.\u write\u client.delete(*键)
    返回状态
    #传递要删除的模式
    CACHE\u URL\u PAT=“flask\u CACHE*auth*”
    删除模式(缓存URL PAT)
    

    注意:
    flask\u缓存
    是flask缓存中的默认
    cache\u KEY\u前缀
    。如果您对
    CACHE\u KEY\u PREFIX
    使用了其他值,请使用该值(而不是
    flask\u CACHE\u
    )作为搜索模式的前缀