2

我正在尝试删除缓存存储中包含(在本例中以)缓存键的子字符串开头的所有条目,但我没有看到任何简单的方法来执行此操作。我使用 Memcache 作为后端。

如果我正确理解了代码,我需要在调用deleteor时传递完整的缓存键delete_many。有没有其他方法可以做到这一点?

如果有更好的方法,我将解释我正在尝试做什么:我需要在某些用户修改其设置时清除缓存。清除缓存clear()将删除所有用户的缓存条目,大约 110K,所以我不想使用它。

key_prefix使用用户的 ID、请求的路径和其他变量生成。缓存键始终以经过身份验证的用户的 ID 开头。所以理想情况下我会使用类似的东西delete_many(user_id + ".*")

4

1 回答 1

1

不支持它,因为 Memcache 被设计为分布式哈希。没有存储要搜索的键的索引。

理想情况下,您应该知道密钥可能有什么后缀。如果没有,您可以自己在用户的特殊键中维护索引。Like user_id + '_keys'which 包含一个键列表。这样,您可以逐个键循环并删除用户的所有缓存。

您可以覆盖该.set函数来管理这个新密钥。

于 2015-03-10T15:44:23.333 回答