使用以(或包含)子字符串开头的键获取或删除 Flask 中的缓存条目
Getting or deleting cache entries in Flask with the key starting with (or containing) a substring
我正在尝试删除缓存存储中包含(在本例中为开头)缓存键子字符串的所有条目,但我没有看到任何简单的方法来执行此操作。我正在使用 Memcache 作为后端。
如果我对代码的理解正确,我需要在调用delete
或delete_many
时传递完整的缓存键。还有其他方法吗?
如果有更好的方法,我将解释我正在尝试做的事情:我需要在某些用户修改其设置时清除缓存。使用 clear()
清除缓存将删除所有用户的缓存条目,大约 110K,所以我不想使用它。
我正在使用用户 ID、请求路径和其他变量生成 key_prefix
。缓存键始终以经过身份验证的用户的 ID 开头。所以理想情况下我会使用类似 delete_many(user_id + ".*")
它不受支持,因为 Memcache 被设计为分布式哈希。没有存储用于搜索的键索引。
理想情况下,您应该知道密钥可能具有的后缀。
如果没有,您可以自己在用户的特殊键中维护一个索引。
像 user_id + '_keys'
,它包含一个 list 键。
这样就可以按键循环,删除用户的所有缓存。
您可以覆盖 .set
函数来管理这个新密钥。
我正在尝试删除缓存存储中包含(在本例中为开头)缓存键子字符串的所有条目,但我没有看到任何简单的方法来执行此操作。我正在使用 Memcache 作为后端。
如果我对代码的理解正确,我需要在调用delete
或delete_many
时传递完整的缓存键。还有其他方法吗?
如果有更好的方法,我将解释我正在尝试做的事情:我需要在某些用户修改其设置时清除缓存。使用 clear()
清除缓存将删除所有用户的缓存条目,大约 110K,所以我不想使用它。
我正在使用用户 ID、请求路径和其他变量生成 key_prefix
。缓存键始终以经过身份验证的用户的 ID 开头。所以理想情况下我会使用类似 delete_many(user_id + ".*")
它不受支持,因为 Memcache 被设计为分布式哈希。没有存储用于搜索的键索引。
理想情况下,您应该知道密钥可能具有的后缀。
如果没有,您可以自己在用户的特殊键中维护一个索引。
像 user_id + '_keys'
,它包含一个 list 键。
这样就可以按键循环,删除用户的所有缓存。
您可以覆盖 .set
函数来管理这个新密钥。